WHERE句内で「値=最大値」を取得する方法
どのようなSQLを書けばよいのかわからないので質問させてください。
以下、MasterテーブルとDataテーブルがあります。
MasterテーブルとDataテーブルのレコードを結合して取得したいと思っています。
ただし、Dataテーブルのレコードはkey1,key2,key3でグループ化した中で最新の日付の
レコードと結合したいと思っています。
以下のような取得結果を想定しているのですがどのようなSQLを書けばよろしいでしょうか。
ちなみに
SELECT m.key1, m.key2, m.key3, m.type, m.name, d.date, d.value FROM test.master m, test.data d;
where m.key1 = d.key1 and m.key2 = d.key2 and m.key3 = d.key3
and d.date = (select Max(date) from data group by key1, key2, key3)
というSQLではエラーになってしまいました。
【取得結果】
key1 key2 key3 type name date value
-------------------------------------------------------------------------------------------------------------
1 2 3 11 name1 2016-12-17 12:00:00 30
4 5 6 22 name2 2016-12-18 12:00:00 30
7 8 9 33 name3 2016-12-19 12:00:00 30
両者とも主キーはkey1,key2,key3となります。
【Master】
key1 key2 key3 type name
------------------------------------------------------------
1 2 3 11 name1
4 5 6 22 name2
7 8 9 33 name3
【Data】
key1 key2 key3 date value
---------------------------------------------------------------------------------
1 2 3 2016-12-17 10:00:00 10
1 2 3 2016-12-17 11:00:00 20
1 2 3 2016-12-17 12:00:00 30
4 5 6 2016-12-18 10:00:00 10
4 5 6 2016-12-18 11:00:00 20
4 5 6 2016-12-18 12:00:00 30
7 8 9 2016-12-19 10:00:00 10
7 8 9 2016-12-19 11:00:00 20
7 8 9 2016-12-19 12:00:00 30
お礼
orでした。orz 移植は特に考え無いので、postgresqlだけで大丈夫です。 postgresqlは将来的にも無料で使えそうですし、、 postgresql以外は有料そうですし、、。 早い返信大感謝です。 ありがとうございました。