- ベストアンサー
SQL文作成のお願い
前提として下記のようなテーブルがあります。 テーブル名:test フィールド: 1)id: varchar, not null 2)name: varchar 3)date: timestamp with time zone, not null このテーブルに下記のようなレコードがあります。 '00001', 'A', '2005-01-01 00:00:00' '00001', 'B', '2005-07-01 00:00:00' '00001', 'C', '2005-11-01 00:00:00' '00002', 'X', '2005-01-20 00:00:00' '00002', 'Y', '2005-07-20 00:00:00' '00002', 'Z', '2005-11-20 00:00:00' ■今やりたいこと このテーブルからidごとにdateフィールド値が最近のレコードを取得したい。 ■やってみたこと 下記SQLを発行しました。 >select id, max(date) from test group by id order by id 結果==> 00001 2005-11-01 00:00:00 00002 2005-11-20 00:00:00 実際はnameフィールドの値も取得したいのですが、group by句を使うとフィールド指定ができませんでした。 ■だめだったSQL select id, name, max(date) from test group by id order by id どのようにSQLを書けばよろしいでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
初めに、PrimaryKeyがIDとNAMEという事を想定します。 SELECT TEST.ID, TEST.NAME, WK.DATE FROM TEST, ( SELECT TEST.ID, MAX(TEST.DATE) AS DATE FROM TEST GROUP BY TEST.ID ) WK WHERE TEST.ID = WK.ID AND TEST.DATE = WK.DATE ORDER BY TEST.ID 動作確認済み。
その他の回答 (1)
- bin-chan
- ベストアンサー率33% (1403/4213)
ORACLEの場合だったら以下で出来たはず。 where条件2項目をカッコでくくるのがミソ。 PostgresSQLでも通用するか、結果を教えてください。 select id, name, date from test where (id, date) = ( select (id, max(date)) from test group by id order by id )
補足
回答ありがとうございます。 早速PostgreSQLで試したところ、 ERROR: more than one row returned by a subquery used as an expression とエラーが返ってきました。どうやらサブクエリからの複数列の取得がPostgreSQLではサポートされていないようです。
お礼
ありがとうございます!! 解決しました!!!