お世話になります。
ORACLEのMAX()関数を使用して、
下記内容を取得するSQLを作成しています。
・商品テーブルから商品コードを取得したい
・上記の取得条件として、商品テーブルの日付項目が最新日付のレコードのみを
取得したい
・上記の取得条件に加えて、指定したいくつかの商品に該当するもののみを
検索対象としたい
【SQLサンプル】
SELECT
商品コード
FROM
商品テーブル
WHERE
商品コード IN (101, 102, 103)
AND 在庫区分 = '0'
AND 日付 = (SELECT MAX(日付) FROM 商品テーブル
WHERE 商品コード IN (101, 102, 103)
AND 在庫区分 = '0'
)
AND ランク = (SELECT MAX(ランク) FROM 商品テーブル
WHERE 商品コード IN (101, 102, 103)
AND 在庫区分 = '0'
)
上記以外の書き方で何か良い書き方があれば、
ご教授願えますか? よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
データの内容がわからないのではっきりとはいえませんが、
データの内容によっては、質問のSQLはまずいです。
商品コード,日付
101,5/5
102,5/6
103,5/4
とあると、102しかとってこないのでは?
普通は、
SELECT
商品コード
FROM
商品テーブル X
WHERE
商品コード IN (101, 102, 103)
AND 在庫区分 = '0'
AND 日付 = (SELECT MAX(日付) FROM 商品テーブル Y
WHERE X.商品コード = Y.商品コード
AND Y.在庫区分 = '0'
)
とします。
で、もう1点問題があって
ランク
の部分です。
商品コード,日付,ランク
101,5/5,3
101,5/6,2
とあるとどちらを優先ですか?
このパターンがないとして、
商品コード,日付,ランク
101,5/5,3
101,5/5,2
101,5/5,1
のようなデータが入っているので、
最大の日付を優先とすると、
AND X.ランク = (SELECT MAX(ランク) FROM 商品テーブル Z
WHERE X.商品コード = Z.商品コード
AND Z.在庫区分 = '0'
AND Z.日付 = (SELECT MAX(日付) FROM 商品テーブル Q
WHERE Q.商品コード = Z.商品コード
AND Q.在庫区分 = '0'
)
)
とでもしますか。
別の方法
SELECT
X.商品コード
FROM
商品テーブル X,
(
SELECT
商品コード,MAX(日付) as 日付
FROM
商品テーブル
WHERE
商品コード IN (101, 102, 103)
AND 在庫区分 = '0'
group by 商品コード) Y,
(
SELECT
商品コード,日付,MAX(ランク) as ランク
FROM
商品テーブル
WHERE
商品コード IN (101, 102, 103)
AND 在庫区分 = '0'
group by 商品コード,日付) Z
WHERE x.商品コード IN (101, 102, 103)
AND x.在庫区分 = '0'
AND x.商品コード = Y.商品コード
AND x.日付 = Y.日付
AND x.商品コード = Z.商品コード
AND Y.日付 = Z.日付
AMD x.ランク = Z.ランク
という方法もあります。
(副問い合わせで抽出された結果のデータ量が多いとリソースを食うし、レスポンスは悪いですが。)
No.1
- 回答日時:
>・上記の取得条件として、商品テーブルの日付項目が最新日付のレコードのみを取得したい
とありますが、記載のSQLは「日付が最新」かつ「ランクが最大」となっていますよね。
とりあえず、記載のSQLをベースにしました。
ORACLEのバージョンが書いていないのですが、分析関数が使える(9i?)なら。
SELECT
商品コード
FROM (
SELECT
商品コード,日付,ランク
,MAX(日付) OVER() MAX日付
,MAX(ランク) OVER() MAXランク
FROM
商品テーブル
WHERE
商品コード IN (101, 102, 103)
AND 在庫区分 = '0')
WHERE
日付 = MAX日付 AND ランク = MAXランク;
とか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 日本の全市区町村を人口密度が低 1 2023/06/18 19:51
- その他(買い物・ショッピング) JANコードの登録について 1 2022/07/23 14:19
- Visual Basic(VBA) VBAでのループ順序について 3 2023/03/13 10:55
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「マスタ」と「テーブル」の違...
-
重複するキーから一番古い年月...
-
2つのテーブルから条件に一致...
-
遅延制約について
-
日付の最大値を検索条件にする方法
-
SQL文について(片方のテーブル...
-
ACCESS 一つのフィールドに複...
-
ACCESSのコンパイルエラーについて
-
主キーの変更
-
Accessユニオンクエリーで2つ...
-
PLSQLで集計関数の値を配列に入...
-
Accessでフィールドを比較した...
-
3つ以上のテーブルをUNIONする...
-
ACCESSのSQLで、NULLかNULLでな...
-
ACCESS2007 フォーム 「バリア...
-
SELECT文でのデッドロックに対...
-
クエリのキャンセルがいつにな...
-
accessテーブル作成クエリを実...
-
sqlserverで集計結果をUPDATEし...
-
オラクルではできるのにSQLSERV...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「マスタ」と「テーブル」の違...
-
2つのテーブルから条件に一致...
-
重複するキーから一番古い年月...
-
ACCESS 一つのフィールドに複...
-
行方向のデータを横に並べる
-
PLSQLの識別子エラー
-
Accessでフィールドを比較した...
-
主キーの変更
-
Inner join と Left joinの明...
-
続.ORACLEのSELECTのソートに...
-
商品コード番号を入力すると商...
-
SQL 2つのテーブルとSUBSTRING...
-
自分自身への矢印
-
ACCESSのコンパイルエラーについて
-
ACCESS2000でDCount関数の使い方
-
Accessユニオンクエリーで2つ...
-
請求と入金のテーブルの作成の...
-
OracleのUnion内でそれぞれのOr...
-
VIEWでテーブルの集計結果...
-
【Access初心者】最大値と次に...
おすすめ情報