2011-06-06 21 views
0

我想選擇與其他表的最大日期,只給我一個不同的最大日期行,而不是其他日期的其他行。我最大的代碼是一行數據僅適用於最大日期 - 事務SQL

SELECT DISTINCT     
Cust.CustId,      
LastDate=(Select Max(Convert(Date,TreatmentFieldHstry.TreatmentDateTime)) 
      FROM TreatmentFieldHstry 
      WHERE Cust.CustSer = Course.CustSer 
      AND Course.CourseSer = Session.CourseSer 
      AND Session.SessionSer = TreatmentFieldHstry.SessionSer) 

這給多個行取決於多少日期 - 我只想一個最大 - 任何人都可以幫助這個?

感謝

+1

似乎並不完整的SQL。外部SELECT的FROM子句在哪裏? – 2011-06-06 16:38:15

+0

只需確認...您只需要基於治療現場歷史表中最近期日期的單個客戶ID? – DRapp 2011-06-06 16:39:30

+0

還是你想要每個表的最大日期,所有的值返回單行? – squillman 2011-06-06 16:42:29

回答

0

沒有指定正是你正在使用的數據庫和版本 - 但如果你的SQL Server 2005或更新版本,您可以使用類似這樣(的CTE與ROW_NUMBER排名功能) - 我已經簡化了一下,因爲我不知道你選擇的其他表格是什麼,這些表格從來沒有出現在任何SELECT列表中.....

;WITH TopData AS 
(
    SELECT c.CustId, t.TreatmentDateTime, 
     ROW_NUMBER() OVER(PARTITION BY c.CustId ORDER BY t.TreatmentDateTime DESC) AS 'RowNum' 
    FROM 
     dbo.TreatmentFieldHstry t 
    INNER JOIN 
     dbo.Customer c ON c.CustId = t.CustId -- or whatever JOIN condition you have 
    WHERE 
     c.CustSer = Course.CustSer 
) 
SELECT 
    * 
FROM 
    TopData 
WHERE 
    RowNum = 1 

基本上,CTE(公用表表達式)將您的數據按CustId劃分,並按TreatmentDateTime排序(降序 - 最新的最前) - 並用連續數字爲每個條目編號 - 對於每個「分區」(例如,對於CustId的每個新值)。有了這個,每個客戶的最新條目有RowNum = 1這是我用來從該CTE中選擇它。

相關問題