私は、次のバレーボールの試合がいつ起こるかを知る必要があります。私は、結果がIS NULL
であるため、まだ起こっていないすべてのバレーボールの試合に、試合の日程をうまく絞り込んだ。私はすべての行を選択している、私はちょうど最も早い日付を見つける必要があります。ここで最新の日付または最も早い日付を検索する<code>team_ID</code>という外部キー、<code>game_date</code>という日付の列、<code>result</code>という1つのcharの列を持つテーブルがあります。
は、私が持っているものです:私は、時間旅行者だ
SELECT game.game_date, team.team_name
FROM game
JOIN team
ON team.team_id = game.team_id
WHERE team.sport_id IN
(SELECT sport.sport_id
FROM sport
WHERE UPPER(sport.sport_type_code) IN
(SELECT UPPER(sport_type.sport_type_code)
FROM sport_type
WHERE UPPER(sport_type_name) like UPPER('%VOLLEYBALL%')
)
)
AND game.result IS NULL;
をので、古い日付を気にしません。
私はそれを実行すると、私はこれを取得:
GAME_DATE TEAM_NAME
----------- ----------
11-NOV-1998 BEars
13-NOV-1998 BEars
13-NOV-1998 WildCats
14-NOV-1998 BEars
私はので、私はその日に演奏のみMIN(DATE)
とTEAM_NAME
を取得し、それを設定するにはどうすればよいですか?
私はAND game.game_date = MIN(game.game_date)
を試しましたが、ここではグループ機能が許可されていないことを伝えています。 MIN(game_date)
を取得し、それを満たす条件として使用する方法がなければなりません。
私はOracle 11g pl/sqlを使用しています。
これは、最終的な作業コードでなければなりません。
SELECT *
FROM
(
SELECT g.game_date, t.team_name
FROM game g
JOIN team t
ON t.team_id = g.team_id
JOIN sport s
ON t.sport_id = s.sport_id
JOIN sport_type st
ON UPPER(s.sport_type_code) IN UPPER(st.sport_type_code)
WHERE UPPER(sport_type_name) like UPPER('%VOLLEYBALL%')
AND g.result IS NULL
ORDER BY g.game_date
)
WHERE ROWNUM = 1;
こと'ORDER BY'節が適用される前に' ROWNUM' psuedocolumnが生成されるので、 "final"コードは動作するとは保証されません。データベースが行を生成して残りを破棄し、データ。データベースが偶然最小の行を最初に生成しているので動作しているように見えますが、動作することは保証されていません(ほとんどの場合、動作しません)。 – MT0