- ベストアンサー
SQLでMAXを使った
□オラクルのデータ(テーブル名:abc) ------------------------------------------------- 列名 x y z date qq ------------------------------------------------- a a a 2003/12/1 a b b b 2003/01/01 b a a a 2003/12/14 b b b 2005/12/30 □結果 ------------------------------------------------- 列名 x y z date qq ------------------------------------------------- a a a 2003/12/14 a b b b 2005/12/30 b 上の結果を出したい時、SQLで "SELECT x,"_ & "y," _ & "z," _ & "Max(date) AS abc2, qq FROM abc" _ & "GROUP BY x," _ & "y," _ & "z," _ & "qq" としたらエラー「要求された名前、または序数に対応する項目がコレクションで見つかりません」 と出てしまいます。 データベースはオラクルです。 正しい書き方を教えて下さい。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
もっと良い方法があるような気がしますが。。。 select a.x,a.y,a.z,a.date,a.qq from abc a, (select x,y,z,max(date) wdate from abc group by x,y,z) b where a.x=b.x and a.y=b.y and a.z=b.z and a.hiduke=b.wdate って感じで動きました。 あんまり速くなさそうですね(^^ゞ 参考になれば、幸いです。
その他の回答 (3)
- eipu
- ベストアンサー率39% (25/64)
環境が無いので確認はしてませんが、 >"SELECT x,"_ > & "y," _ > & "z," _ > & "Max(date) AS abc2, qq FROM abc" _ > & "GROUP BY x," _ > & "y," _ > & "z," _ >& "qq" のうち "Max(date) AS abc2, qq FROM abc" _ の部分を "Max(date) AS abc2, qq FROM abc " _ としてやれば動くんじゃないでしょうか? (abcの後ろに半角スペース入れてます)
補足
解決しました。 MAX関数を使った場合、表示する項目名をAS以降の自分で付けた名前にしなければならないということを知りませんでした、、。 色々試すだけで、よく分からないでやると、こういう事になるんですね。 どうもありがとうございました。
- yoshisuke
- ベストアンサー率65% (19/29)
項目「qq」の値は最新の日付が格納されているレコードがNULL の場合は他のレコードから補完する必要があるということでしょうか? 補完する場合は基準についてもう少し教えてください。
補足
申し訳ございません。データを間違えました。 table name : abc ------------------------------------------------- x y z date qq ------------------------------------------------- a a a 2003/12/01 a b b b 2003/01/01 b a a a 2003/12/14 a b b b 2005/12/30 b ------------------------------------------------- です。NULL の場合、他のレコードから補完する必要はありません。
- funamin
- ベストアンサー率0% (0/6)
select * from abc where (x,y,z,date) = (select x,y,z,max(date) from abc group by x,y,z ) これでは、だめでしょうか?? 実際今、環境がないので確認できないのですが・・。
補足
ありがとうございます。 *------------------------- "SELECT * FROM abc WHERE (x, y, z, date, qq) = (SELECT x, y, z, MAX(date), qq FROM abc GROUP BY x, y, z, qq)" *------------------------- としましたが、エラーになってしまします。。 結果の記述も悪かったので、もう一度書かせて頂きます。 ---------------------------- x y z date qq ---------------------------- a a a 2003/12/14 a b b b 2005/12/30 b ---------------------------- です。 単純に、重複するものを表示しないで「date」が最大値のものを表示するようにしたいだけなのですが、SQL難しいです。。
お礼
とても勉強になりました。 ご丁寧な解答、助かりました。 ありがとうございました。
補足
ありがとうございます! 早速挑戦しているのですが、私の記述が悪いのか なかなかうまくいきません。 もう少し頑張ってみます。