[英]SQL Server: Get data from record with max date / newest date
我正在使用以下存儲過程從工作正常的列中獲取最新日期。
有人可以告訴我我該如何修改這一點,以便我還可以選擇該記錄的其余數據(即,具有最大日期的記錄)嗎? 有問題的列稱為“更新”,其格式設置為日期時間,因此該值應唯一。
示例:列“ updated”的最大值是“ 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')
您可以采用分析方法:
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
SELECT col1, col2, col3, col4, updated
FROM MeetingDetails
WHERE updated in (
SELECT MAX(updated)
FROM MeetingDetails
WHERE itemStatus = 'active'
)
這應該是您要尋找的。 從這里開始,如果您需要進一步縮小范圍,只需在where子句中添加更多條件。
這是查詢:
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')
基於具有max(updated)的記錄數,此選擇可能返回多個行,因此該查詢可能返回多個節點。
一個簡單的帶有ORDER BY
TOP 1
子句應該適合您。
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')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.