我正在尝试使用其他表格选择字段上的最大日期,以便仅为最大日期提供一个不同的行,而不为其他日期提供其他行。我最大的代码是
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)
这会根据多少日期提供多行 - 我只想要一个最大值 - 任何人都可以帮忙吗?
由于
答案 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中选择的。