- PR -

グループ化の仕方がわかりません

投稿者投稿内容
わしこ
常連さん
会議室デビュー日: 2005/10/18
投稿数: 35
投稿日時: 2005-11-01 18:12
でっちさん、返答ありがとうございます。
でっちさんが指摘されたような場合もありますね…ウムム

引用:

ちょっと抽出します。
コード:
DOC_NO     YMD
---------- --------- 
AAAAAAAAAA 2222 
AAAAAAAAAA 2222 
AAAAAAAAAA 1000 
AAAAAAAAAA 1000 
AAAAAAAAAA 2222 



この部分ですが、同一のDOC_NOに対してYMDが2種類あります。
グループ化の結果取得したいデータは、1件、2件のどちらになるのでしょうか?
1件であれば、先にぼのぼのさんが書かれたように、MINやMAX等のグループ関数を使用することになります。(複数YMDのうち何でソートするかは仕様なので、適切なものをご選択下さい)
※エラーになったのは、おそらく別名の付け方を誤っているのではないでしょうか?
 試されたSQLを載せていただければ判断ができるかと思います。



この場合必要なのは1件です。DOC_NOは必ずユニークに取得したいのです。
SELECT DOC_NO, MAX(SAY_YMD) AS YMD
FROM AAA
WHERE CD='1' AND ID='999999' KNS_CODE IN ('AAAAA','BBBBB')
GROUP BY DOC_NO, YMD
ORDER BY YMD DESC
と書いています。

よろしくお願いします。
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-11-01 18:19
SELECT DOC_NO, MAX(SAY_YMD) AS YMD
FROM AAA
WHERE CD='1' AND ID='999999' KNS_CODE IN ('AAAAA','BBBBB')
GROUP BY DOC_NO , YMD
ORDER BY YMD DESC

太字のとこ、いらないんでは?
でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2005-11-01 18:26
でっちです。

KNS_CODEの条件文の前にANDをつけて、GROUP BYのYMDを削除すればSQL*Plusでは動くと思います。
コード:
SELECT DOC_NO, MAX(SAY_YMD) AS YMD 
FROM AAA 
WHERE CD='1'
AND ID='999999'
AND KNS_CODE IN ('AAAAA','BBBBB') 
GROUP BY DOC_NO 
ORDER BY YMD DESC


で、Access経由だと、Order Byで別名YMDを解決してくれないみたいですね。
そっちは、MAXをそのまま記述すればOKのようです。

コード:
SELECT DOC_NO,MAX(SAY_YMD)
FROM AAA 
WHERE CD='1'
AND ID='999999'
AND KNS_CODE IN ('AAAAA','BBBBB') 
GROUP BY DOC_NO 
ORDER BY MAX(SAY_YMD) DESC



蛇足かもしえませんが、最初のSQLではYMDは取得対象ではなかったようですね。
ソートにだけ必要なのであれば、ORDER BYにだけ書いてもOKですよ。

コード:
SELECT DOC_NO
FROM AAA 
WHERE CD='1'
AND ID='999999'
AND KNS_CODE IN ('AAAAA','BBBBB') 
GROUP BY DOC_NO 
ORDER BY MAX(SAY_YMD) DESC


わしこ
常連さん
会議室デビュー日: 2005/10/18
投稿数: 35
投稿日時: 2005-11-01 18:40
でっちさん!ぼのぼのさん!ありがとうございました。

>SELECT DOC_NO, MAX(SAY_YMD) AS YMD
>FROM AAA
>WHERE CD='1' AND ID='999999' KNS_CODE IN ('AAAAA','BBBBB')
>GROUP BY DOC_NO , YMD
>ORDER BY YMD DESC
>太字のとこ、いらないんでは?

「,YMD」省いたらできました!!

説明が悪くお手間をとらせました。
GROUP BYはSQLの基本ですよね。
勉強します。
みなさま、本当にありがとうございました。
たまき
会議室デビュー日: 2005/02/17
投稿数: 10
投稿日時: 2005-11-02 10:34
解決されたようでよかったです(^^)

蛇足ですが「DISTINCT」は全件検索をまず実行し、問い合わせ結果を昇順に並び替えてから、重複データを除きつつ結果を返すので、自動的に昇順に並び替えられます。

またSQLは少しずつやっていった方が、どこまでができて、どこでエラーが出ているのかわかりやすくなって、やり易いですよ♪o(^-^)o
(まずはGROUPBYのみで実行、その後ORDERBYをつける、といった感じで私はやってます)
_________________
たまき@天
凶暴な兎ほど可愛い!?

スキルアップ/キャリアアップ(JOB@IT)