1

結果が最後に受けたテストから学生のテストスコアを返す SQL クエリの作成に取り組んでいます。これはかなり単純なはずだと思いますが、私はそれを見ていません。

ここに私のテストデータがあります

Name    Date        Score
John    2/3/2012    94
John    2/14/2012   82
John    2/28/2012   72
Mary    2/3/2012    80
Mary    2/28/2012   71
Ken     2/14/2012   68
Ken     2/14/2012   66

返された結果が

John    2/28/2012   72
Mary    2/28/2012   80
Ken     2/14/2012   66

助けていただければ幸いです。

4

3 に答える 3

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

また

SELECT a.*
FROM temp a
INNER JOIN 
(
  SELECT name,MAX(date) as max_date 
  FROM temp a
  GROUP BY name
)b ON (b.name = a.name AND a.date=b.max_date)

ここに例を含むSQLフィドルがあります

または、サンプルデータに示されているように、日付に各人に複数のレコードがある場合でも.

SELECT c.name,c.date, MAX(c.score) as max_score
FROM
(
 SELECT a.* 
 FROM temp a
 INNER JOIN 
 (
  SELECT name,MAX(date) as max_date 
  FROM temp a
  GROUP BY name
 )b ON (b.name = a.name AND a.date=b.max_date)
)c
group by c.name,c.date

この例のSQLフィドル

于 2012-05-09T18:01:59.537 に答える
1
SELECT Name, Date, Score
FROM tablename t1
WHERE Date = (SELECT MAX(Date) 
              FROM tablename
              WHERE Name = t1.Name
              GROUP BY Name)
于 2012-05-09T18:03:34.857 に答える
0

どのデータベースを使用していますか? row_number()これに答える正しい方法であるほとんどのサポート:

select *
from 
(
  select t.*, row_number() over (partition by name order by date desc) as seqnum
  from table t
)
where rownum = 1
于 2012-05-09T18:19:08.813 に答える