2012-05-09 91 views
1

我正在創建一個SQL查詢,其中結果將返回他們所進行的最後一次測試的學生測試分數 。我認爲這應該相當簡單,但我只是沒有看到它。如何執行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 

我明白任何幫助。

+1

看一個聚合函數max()和GROUP BY – HLGEM

回答

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

OR

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 fiddle用一個例子

,甚至這一點,如果你有每個人的日期超過一個紀錄就像你在你的樣品數據顯示。

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 fiddle with this example

+0

Bluefeet - 謝謝你。就是這樣。感謝以及SQL小提琴網站。我以前沒見過這個。我非常感謝你的幫助! – Ray

1
SELECT Name, Date, Score 
FROM tablename t1 
WHERE Date = (SELECT MAX(Date) 
       FROM tablename 
       WHERE Name = t1.Name 
       GROUP BY Name) 
+0

山姆。謝謝您的回覆。我感謝幫助! – Ray

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 
+0

我打算使用MS SQL。使用Row_numbers()的有趣概念。我將不得不更多地檢查這一點。謝謝。 – Ray

相關問題