2

最新の日付で(名前と日付に基づいて)個別の行を取得するために、次のテーブルのSQLクエリを作成する方法を教えてください。

Date               Name     Score

2011-06-16 10:30   Johan    36    
2010-12-09 08:52   Thomas   32
2012-04-25 15:14   Jak      56
2008-09-07 11:57   Jak      64
2012-02-28 13:22   Jan      23 
2011-01-11 12:08   Thomas   22      
2008-10-06 12:22   Kane     54

その結果、クエリは行 1、3、6、7 を表示します。

4

5 に答える 5

2

最大日付の重複の問題のため、私は何かを貢献しています。上記のすべてがすべての重複を返します。質問者がまだ行の 1 つだけを必要としている可能性があります。

SELECT date, name, score
FROM (select *,
             row_number() over (partition by name order by date desc) as seqnum
      from table a
     ) a
WHERE seqnum = 1

これにより、最新の日付から逆方向に数えて行が列挙されます。次に、いずれかの日付を選択します。

于 2012-05-09T15:36:06.927 に答える
1

RDMS がウィンドウ関数をサポートしていないと仮定すると、

SELECT a.*
FROM table1 a
INNER JOIN 
(
  SELECT name,MAX(date) as max_date -- date field may need escaping
  FROM table1 a
  GROUP BY name
)b ON (b.name = a.name AND a.date=b.max_date)

アップデート

Demsのコメントに従って、date+name は一意ではないが、名前を 1 回だけ表示したい場合は、

SELECT c.name,c.date, MAX(c.score) as max_score
FROM
(
 SELECT a.* 
 FROM table1 a
 INNER JOIN 
 (
  SELECT name,MAX(date) as max_date -- date field may need escaping
  FROM table1 a
  GROUP BY name
 )b ON (b.name = a.name AND a.date=b.max_date)
)c
于 2012-05-09T15:16:16.547 に答える
1

このようなものはうまくいくはずです...

SELECT date, name, score
FROM table a
WHERE date = (
    SELECT MAX(date)
    FROM table b
    WHERE a.name = b.name
)
于 2012-05-09T15:16:18.903 に答える
1

以下を使用できます。

select date, name, score
from temp t1
where date = (select max(date) from temp where t1.name = temp.name)

デモでSQLフィドルを参照してください。

于 2012-05-09T15:18:18.543 に答える
-1
select convert(varchar,date,103) as name_date, name from table1 where convert(varchar, date, 103) = (select convert(varchar,max(date),103) as n_date from table1)

これは、mssql データベースの sql 形式で時間が考慮されない場合です。

于 2012-05-09T15:25:42.220 に答える