仅限最大日期的一行数据 - 交易SQL

时间:2011-06-06 16:31:20

标签: sql sql-server tsql

我正在尝试使用其他表格选择字段上的最大日期,以便仅为最大日期提供一个不同的行,而不为其他日期提供其他行。我最大的代码是

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 个答案:

答案 0 :(得分:0)

您没有准确指定您正在使用的数据库和版本 - 但如果您使用的是SQL Server 2005或更新版本,则可以使用类似的内容(CTE的{{1排名功能) - 我已经简化了一下,因为我不知道你选择的那些其他桌子是什么,不会出现在任何SELECT中列列表.....

ROW_NUMBER

基本上,CTE(公用表格表达式)按;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 分区您的数据,并按CustId排序(降序 - 最新的第一个) - 并为每个条目编号 - 每个条目都有一个连续的数字 - 对于每个&#34 ;分区" (例如,TreatmentDateTime的每个新值)。有了这个,每个客户的最新条目都有CustId,这是我用来从CTE中选择的。