1

tbl3つの列を持つテーブルがあります。

id | fk | dateof
 1 |  1 | 2012-01-01
 2 |  1 | 2012-01-02
 3 |  2 | 2012-02-01
 4 |  2 | 2012-03-01
 5 |  3 | 2012-04-01

idは行のIDであり、fkは別のテーブルへの外部キーでありdateof、は日付列です。

私が欲しいのは、が最新のグループ化されたid場所を取得することです。私が試したこと:dateoffk

SELECT id, MAX(dateof) FROM tbl GROUP BY fk

しかし、私は次のような結果を得る:

1 | 2012-01-02
3 | 2012-03-01
5 | 2012-04-01

欲しいとき:

2 | 2012-01-02
4 | 2012-03-01
5 | 2012-04-01

探している結果をクエリして取得するにはどうすればよいですか?重要な場合はMySQLサーバー。ありがとう。

4

2 に答える 2

4

個人的には

SELECT id, tbl.dateof dateof
FROM tbl 
INNER JOIN
 (SELECT fk, MAX(dateof) dateof 
  FROM tbl 
  GROUP BY fk) temp
ON tbl.fk = temp.fk AND tbl.dateof = temp.dateof

ゴードンの答えは正しく、コードは少ないですが、私は一時テーブルを作成することを好みます。私が何をしているのかは、他の開発者にとってより明確です。

于 2013-02-15T20:13:54.877 に答える
0

欲しいものを手に入れるには:

select t.*
from (select tbl.*,
             row_number() over (partition by fk order by dateof desc) as seqnum
      from tbl
     ) t
where seqnum = 1

これは、ウィンドウ関数を備えた妥当なデータベースを使用していることを前提としています。質問でデータベースを指定しません。

于 2013-02-15T20:14:11.890 に答える