簡體   English   中英

SQL Server:從記錄中獲取具有最大日期/最新日期的數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM