プロが教えるわが家の防犯対策術!

□オラクルのデータ(テーブル名: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"
としたらエラー「要求された名前、または序数に対応する項目がコレクションで見つかりません」
と出てしまいます。
データベースはオラクルです。
正しい書き方を教えて下さい。

A 回答 (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

って感じで動きました。
あんまり速くなさそうですね(^^ゞ

参考になれば、幸いです。

この回答への補足

ありがとうございます!
早速挑戦しているのですが、私の記述が悪いのか
なかなかうまくいきません。
もう少し頑張ってみます。

補足日時:2003/03/14 19:15
    • good
    • 0
この回答へのお礼

とても勉強になりました。
ご丁寧な解答、助かりました。
ありがとうございました。

お礼日時:2003/03/18 11:24

環境が無いので確認はしてませんが、



>"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以降の自分で付けた名前にしなければならないということを知りませんでした、、。
色々試すだけで、よく分からないでやると、こういう事になるんですね。

どうもありがとうございました。

補足日時:2003/03/18 11:17
    • good
    • 0

項目「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 の場合、他のレコードから補完する必要はありません。

補足日時:2003/03/14 14:57
    • good
    • 0

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難しいです。。

補足日時:2003/03/14 15:36
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!