あるテーブルから、最大値を持つレコードのキーと最大値だけでなく、そのレコードの値を出したいと思います。
最大値をもつレコードを抽出して、元のレコードと結合するしか方法はないのかなと思い、類似した質問があるような気もするのですが、条件が異なるとうまく行かないため、自分なりに考えてみました。
データベースはDB2です。
SELECT a.倉庫,a.品目,a.単価 FROM 在庫マスタ as a
where (a.品目,a.単価) in (select b.品目, max(b.単価)
from 在庫マスタ as b group by b.品目)
つまり、副問合せするときの結合キーが複数あるとSQLがエラーになってしまうようなのです。
結合キーが2つ以上ある時、このようなパターンの対処方法は無いでしょうか?
No.4
- 回答日時:
#2回答者です。
一番簡潔なSQL(#3さん提示のSQL)を思いつかなかった自分が、ちょっと情けないです。
代わりに、もう一つ別のSQLを提示しておきます。
DB2は、分析関数をかなり前から実装しています。分析関数を使えば、ネストの深いサブクエリに比べ、代替手段として使える上に、性能も出すことが可能です。
<例3>
SELECT
x.倉庫,x.品目,x.単価
FROM
(SELECT
RANK() OVER(PARTITION BY 品目 ORDER BY 単価 DESC) AS rank,
倉庫,品目,単価
FROM 在庫マスタ) AS x
WHERE x.rank=1
有難うございました。
言葉足らずでしたが、自分の使っているのはOS400のDB2なので、
機能が少ないのかもしれません。
OVER句が使えないようです。
再三のご回答有難うございました。
No.2
- 回答日時:
数年前にDB2でのシステム開発支援をしたことがあるのですが、当時のDB2は、行値構成子(行値式)※1を使っての操作に制限がかなりありました。
※1 「where (列1,列2) 演算子 (値1,値2)」という条件式。
SQL-92で、標準SQLに取り入れられています。
行値構成子を使用しないSQL例を提示しますので、試してみてください。
<例1>
SELECT
a.倉庫,a.品目,a.単価
FROM 在庫マスタ AS a
WHERE EXISTS
(SELECT 1
FROM 在庫マスタ AS b
WHERE a.品目=b.品目
GROUP BY b.品目
HAVING a.単価=MAX(b.単価))
<例2>
SELECT
a.倉庫,a.品目,a.単価
FROM 在庫マスタ AS a
WHERE a.単価 >= ALL (SELECT b.単価
FROM 在庫マスタ AS b
WHERE a.品目=b.品目)
有難うございました。
何れも動作しました。
<例2>のほうが若干スピードは速いようです。
DB2でこのような書き方が出来るとは知りませんでした。
No.1
- 回答日時:
DB2はin述語で複数の要素のあるセットを扱えないのかな? Oracleもそうだったような……DBMSによって方言があるようです。
手元にDBの環境がないので、自信ないけれども……
SELECT a.倉庫,a.品目,a.単価 FROM 在庫マスタ as a
where a.品目 in
(select b.品目 from 在庫マスタ as b where b.単価
in (select max(c.単価) from 在庫マスタ as c group by c.品目))
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- その他(音楽・ダンス・舞台芸能) 「録音品質の良い」オススメのレコードを教えてください。 皆様のお持ちのレコードで「これは音がいい!」 8 2022/08/08 14:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL文で、合計が0のレコードを...
-
表の結合の仕方
-
アクセスにて月末日付を取得し...
-
FROM句にサブクエリ使えませんか
-
for whichの使い方
-
差し込み後、元データを変更し...
-
pythonにてseleniumを使うも、...
-
マイクラPC版のコマンドで効率...
-
グループ毎の最大値を持つデー...
-
次の並び替え問題を教えてくだ...
-
Exel VBA 別ブックから該当デ...
-
処理件数を非表示にしたい
-
エクセルで最後の文字だけ置き...
-
chatgptでつくってもらったコー...
-
特定の文字列で列を区切るには?
-
英語ができる方、問題をお願い...
-
ExcelのVBAコードについて教え...
-
パイソンプログラム
-
広告ブロッカーのアドカードと...
-
外部参照してるキーを主キーに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXISTSを使ったDELETE文
-
SQL文で、合計が0のレコードを...
-
Accessの実行時エラーについて
-
ACCESS ツリービューの作り方
-
日付により変動する「単価」を...
-
異なるデータベース間のテーブ...
-
前月の取得について
-
アクセス フィールド名に変数...
-
ACCESSでクエリ作成時複数のフ...
-
DBが複雑すぎる
-
ACCESS 商品毎の最新の単価を設...
-
最大値を含むレコードの抽出
-
Access2013で商品に複数の単価...
-
アクセスにて月末日付を取得し...
-
ACCESSでDLookUpすると、不正な...
-
Excel VBA ADODB
-
フィールドの数値を四捨五入の...
-
Excelのユーザーフォームで別の...
-
店舗での日報での良い例を教え...
-
SQLserverでのUPDATE文について
おすすめ情報