ある特定の項目の最大値にあたるレコードの集まりだけを取り出す。。。
単にMAX関数を使うだけではSQLは完成しない。。。
さらに、その最大値が日付だった場合、指定の日付を最大値とみなして抜き出すことをしようものなら、さらに工夫が必要だ。
そこで例題 本日が 2009年 4月1日として その日現在の集合を抜き出す。20000101~ 20041231 までは 10 200501001 ~ 20081231 までは 20というよな運用として
テーブル名 T
データ
FA FB FC
--------------------------------------------
abc 20000101 10
abc 20050101 20
abc 20090101 30
abc 20100101 40
def 20040401 50
def 20090331 60
def 20091231 70
def 20100101 80
ghi 20030501 90
ghi 20090501 100
ghi 20100501 110
結果
F1 F2 FC
--------------------------------------------
abc 20090101 30
def 20090331 60
ghi 20030501 90
SELECT Q1.F1, Q1.F2, T1.FC FROM T
AS T1 INNER JOIN
(SELECT FA AS F1,
MAX(CASE WHEN FB >'20090401' THEN
'00000000'
ELSE
FB
END)
AS F2 FROM T
GROUP BY FA)
AS Q1
ON Q1.F1=T1.FA
AND Q1.F2=T1.FB
ポイントはサブクエリで指定の日付を超えた場合に'00000000'と変換する部分がポイント
尚、Micrsoft Access ではサポートをしていないらしいとのことで、エラーが発生
ちなみに CASE を使用する場合には Accessでは IIf を使用する。
Accessではストアドをキックしてレコードを抜き出した方がよさそうである
0 件のコメント:
コメントを投稿