• ベストアンサー
  • すぐに回答を!

Select方法

  • 質問No.1320221
  • 閲覧数39
  • ありがとう数1
  • 回答数2

お礼率 25% (24/96)

Window2000+MYSQL4.0.24環境でPGをしています。
次のような結果をSQLでできるのでしょうか。

TBLA
id number lastmodified temp
1 1 05/04/01 aaaa
2 1 05/04/02 bbbb
3 2 05/04/01 cccc
4 2 05/04/02 dddd
5 3 05/04/01 eeee
6 3 05/04/02 fffff
7 3 05/04/03 ggggg

次のように同一number毎に最新lastmodifiedのレコードを取得したいと思います。

id number lastmodified temp
2 1 05/04/02 bbbb
4 2 05/04/02 dddd
7 3 05/04/03 ggggg

以上よろしくお願いします。

質問者が選んだベストアンサー

  • 回答No.1
  • ベストアンサー

ベストアンサー率 33% (102/307)

MYSQLでなくAccessでためしたので、動かなかったらごめんなさい。

まず、numberごとの最新lastmodifiedは、numberでGROUP BY すれば求まります。
SELECT number, MAX(lastmodified) AS max_lastmodified FROM TBLA GROUP BY number

しかしこれは集計関数が入っているので、idやtempは取得できません。
そこで、上記SQLをサブクエリにして結合してみました。
SELECT TBLA.* FROM TBLA INNER JOIN (SELECT number, MAX(lastmodified) AS max_lastmodified FROM TBLA GROUP BY number) AS TBLB ON TBLA.number = TBLB.number AND TBLA.lastmodified = TBLB.max_lastmodified

その他の回答 (全1件)

  • 回答No.2

ベストアンサー率 32% (598/1831)

Mysqlが4.1以上ならばサブクエリを使ったほうが早いです。

とりあえず一文でやるのならば
SELECT SUBSTRING( MAX( CONCAT(lastmodified,id) ), 9) AS id,number,MAX(lastmodified),SUBSTRING( MAX( CONCAT(lastmodified,temp) ), 9) AS temp FROM TBLA GROUP BY number;
とすればいけます。(超強引)

それよりもTMPTABLEを使ったほうがスマートですね。
(多分こっちのほうが軽い)
CREATE TEMPORARY TABLE tmp SELECT number as a,MAX(lastmodified) as b FROM TBLA GROUP BY number;
SELECT TBLA.* FROM tmp INNER JOIN TBLA ON b = lastmodified where a = number;
DROP TABLE tmp;
(ただし、lastmodifiedが一意の場合。複数入っている場合は工夫してください)
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ