上手な抽出方法が分かりません

解決


ワカバ  2007-01-22 22:20:02  No: 134925

vb6.0 DB:access2000
下記のようなあるコードの中の最新日付のものをそれぞれ抽出する処理を
SQL文で処理して実行結果を出力したいのですが、分かりません。
ご教授の程よろしくお願いします。(過去にあった投稿ですが、私も利用
してみたいのですが、初心者なものでうまくいきません・・・)

元データ(テーブルA)
NUMBER     CODE     DAY                
   1        1     2007/01/01          
   1        2     2007/01/02          
   1        3     2007/01/03   <-
   2        4     2007/01/01          
   2        5     2007/01/02          
   2        6     2007/01/05   <-
   3        7     2007/02/01          
   3        8     2007/02/02          
   3        9     2007/04/03   <-

実行結果
NUMBER     CODE    DAY                
   1        3     2007/01/03              
   2        6     2007/01/05            
   3        9     2007/04/03              

ちなみに私は
Sql = "SELECT NUMBER,CODE,MAX(DAY) FROM テーブルA GROUP BY NUMBER;"
とSQL文を作っていますが、「集計関数の一部として指定された式'CODE'を
含んでいないクエリを実行しようとしました」
とでてしまいます。ヘルプの意味も分からないんです・・


魔界の仮面弁士  2007-01-23 00:29:24  No: 134926

ここは Visual Basic の掲示板なので、SQL のみに特化した質問は場違いかも。

で。提示例を見て、NUMBER は「同一値ごとにまとめている」とわかりますが、
その後の CODE, DAY の取り扱いが不明瞭です。たとえば、
   1        1     2007/01/01
   1        2     2007/01/05
   1        3     2007/01/03
   2        4     2007/01/04
のようなデータだった場合、どのような結果を得たいのかが見えません。
SQL について考える前に、まずは仕様をハッキリさせる必要があるかと。

  パターン(1) CODE, DAY は、それぞれの最大値を対象にしたい。
      1, 3, 2007/01/05
      2, 4, 2007/01/04

  パターン(2) 最大の CODE を持つレコードを対象にしたい。
      1, 3, 2007/01/03
      2, 4, 2007/01/04

  パターン(3) 最大の DAY を持つレコードを対象にしたい。
      1, 2, 2007/01/05
      2, 4, 2007/01/04

  パターン(4) 上記以外。

> Sql = "SELECT NUMBER,CODE,MAX(DAY) FROM テーブルA GROUP BY NUMBER;"
> とSQL文を作っていますが、「集計関数の一部として指定された式'CODE'を
> 含んでいないクエリを実行しようとしました」
> とでてしまいます。ヘルプの意味も分からないんです・・

その SQL をそのまま解釈すると、NUMBER, DAY 列については、
    NUMBER 列  ……(GROUP BY に指定されている)
        同一値ごとにまとめる。
    DAY 列  ……(SELECT に、集計関数MAXで指定されている)
        最大の値ごとにまとめる。
のような結果を期待していることがわかります。

問題は CODE 列で、これは、集計関数も使われていないし、GROUP BY に
指定されてもいません。そのため、どのようにまとめれば良いのかが
不明瞭なため、『'CODE'を含んでいないクエリ』というエラーになります。


ワカバ  2007-01-23 01:33:09  No: 134927

ご返答ありがとうございます。そうですね。SQLの質問は場違いだったかもしれません。すいませんでした。
エラーについてのご指摘を考慮して記述してみたところ正常に抽出して動作
しました。ありがとうございました(^^)!


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加