SQL Server:从最大日期/最新日期的记录中获取数据

时间:2014-02-20 15:02:00

标签: sql sql-server datetime select max

我正在使用以下存储过程从列中获取最新日期。

有人可以告诉我如何修改这个,我也得到了这个记录的其余数据(即最大日期的那个)? 有问题的列称为“已更新”,格式为日期时间,因此其中的值应该是唯一的。

示例: “已更新”列的最大值是“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')

4 个答案:

答案 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')