一行数据仅适用于最大日期 - 事务SQL
问题描述:
我想选择与其他表的最大日期,只给我一个不同的最大日期行,而不是其他日期的其他行。我最大的代码是一行数据仅适用于最大日期 - 事务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)
这给多个行取决于多少日期 - 我只想一个最大 - 任何人都可以帮助这个?
感谢
答
没有指定正是你正在使用的数据库和版本 - 但如果你的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中选择它。
似乎并不完整的SQL。外部SELECT的FROM子句在哪里? – 2011-06-06 16:38:15
只需确认...您只需要基于治疗现场历史表中最近期日期的单个客户ID? – DRapp 2011-06-06 16:39:30
还是你想要每个表的最大日期,所有的值返回单行? – squillman 2011-06-06 16:42:29