我正在使用以下存储过程从列中获取最新日期。
有人可以告诉我如何修改这个,我也得到了这个记录的其余数据(即最大日期的那个)? 有问题的列称为“已更新”,格式为日期时间,因此其中的值应该是唯一的。
示例: “已更新”列的最大值是“itemID”= 3的行。 在这种情况下,我还希望选中此行中的其余数据,例如列名为col1,col2,col3,col4 +列“已更新”。
我的存储过程:
SET NOCOUNT ON;
SELECT CONVERT(VARCHAR(11), MAX(updated), 106) AS lastUpdated
FROM MeetingDetails
WHERE itemStatus = 'active'
FOR XML PATH('updates'), ELEMENTS, TYPE, ROOT('root')
答案 0 :(得分:3)
您可以采用分析方法:
SELECT *
FROM (SELECT col1, col2, col3, col4,
RANK() OVER (PARTITION BY col1, col2, col3
ORDER BY updated DESC) AS rk
FROM MeetingDetails
WHERE itemstatus = 'active') t
WHERE rk = 1
答案 1 :(得分:1)
SELECT col1, col2, col3, col4, updated
FROM MeetingDetails
WHERE updated in (
SELECT MAX(updated)
FROM MeetingDetails
WHERE itemStatus = 'active'
)
这应该是你正在寻找的。从这里开始,如果您需要进一步缩小范围,只需在where子句中添加更多条件即可。
答案 2 :(得分:1)
以下是查询:
set nocount on;
select
md.col1,
md.col2,
-- ......
convert(varchar(11), md.updated, 106) as lastUpdated
from
MeetingDetails md
where
md.itemStatus = 'active'
and md.updated = (select max(updated)
from MeetingDetails
where itemStatus = 'active')
for xml path('updates'), elements, type, root('root')
根据有多少记录具有最大值(已更新),此选择可能会返回多行,因此此查询可能会返回多个节点。
答案 3 :(得分:1)
带TOP 1
的简单ORDER BY
子句应该适合您。
SELECT TOP 1 col1, col2, col3, col4,
updated
FROM @MeetingDetails
WHERE itemStatus = 'active'
ORDER BY
updated DESC
FOR XML PATH('updates'), ELEMENTS, TYPE, ROOT('root')