2010-07-15 99 views
1

我有以下數據:SQL查詢集團通過幫助

cust subject date 
Cust1 Subject1 2010-12-31 21:59:59.000 
Cust1 Subject1 2010-12-31 21:59:59.000 
Cust4 Subject3 2011-02-27 21:59:59.000 
Cust5 Subject1 2010-10-31 21:59:59.000 
Cust5 Subject2 2010-10-31 21:59:59.000 
Cust6 Subject2 2010-10-31 21:59:59.000 
Cust6 Subject2 2010-12-31 21:59:59.000 

我需要實現以下目標:

  • 集團他們的卡斯特和主題
  • 如果有2條記錄與然後我需要返回具有最高日期的那個
  • 如上所述,如果日期相同,則只返回其中的一個。

查詢的結果應該是:

cust subject date 
Cust1 Subject1 2010-12-31 21:59:59.000 
Cust4 Subject3 2011-02-27 21:59:59.000 
Cust5 Subject1 2010-10-31 21:59:59.000 
Cust5 Subject2 2010-10-31 21:59:59.000 
Cust6 Subject2 2010-12-31 21:59:59.000 

誰能幫助我?

我能夠做到的要求,2但不是所有的3

回答

0

使用ROW_NUMBER() - 如果你還沒有使用這個和其他的分區功能以前那麼我可以肯定地建議考慮他們,因爲他們(特別是ROW_NUMBER())有很多用途。

SELECT cust, subject, date 
FROM (
    SELECT cust, subject, date, ROW_NUMBER() OVER (PARTITION BY cust, subject ORDER BY date DESC) AS RN 
    FROM <your table> 
) SubQuery 
WHERE SubQuery.RN = 1 
+0

當然MAX([日期])工作... ROW_NUMBER()是矯枉過正。 :)不過,我喜歡它! – 2010-07-15 06:58:52

+0

我認爲您需要在WHERE子句的行號列上添加'AS RN'才能正常工作... – 2010-07-15 06:59:31

+0

非常感謝。 我接受這個答案的原因是我忘記提及我還需要返回其他列,以至於我不會將它們包含在組中,也不能使用它們的聚合函數(如標題例如),它不會與正常的小組一起工作(至少不像這個那樣容易)。 我會看看分區功能,它們看起來像是一個很大的節省時間。 – HaniBey 2010-07-15 07:09:01

5
SELECT cust, subject, max([date]) FROM myTable GROUP BY cust, subject; 

你真的沒有一列名爲date,你呢? date是一個保留字,這就是爲什麼它必須在上面的查詢中被方括號包圍。

+2

Sweet'n'simple - +1! =) – 2010-07-15 07:00:01

+1

+1用於保留字的使用。 – 2010-07-15 07:28:14

0
select cust, subject, max(date) from table group by cust, subject