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

Posted

技术标签:

【中文标题】SQL Server:从最大日期/最新日期的记录中获取数据【英文标题】:SQL Server: Get data from record with max date / newest date 【发布时间】:2014-02-20 15:01:59 【问题描述】:

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

有人可以告诉我如何修改这一点,以便我还选择了该记录的其余数据(即具有最大日期的数据)? 有问题的列称为“更新”,并格式化为日期时间,因此那里的值应该是唯一的。

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

【问题讨论】:

【参考方案1】:

您可以采用分析方法:

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

【讨论】:

由于您的分区,此查询将为 col1col2col3 的每个组合选择最旧 . 错误地将ASC 切换为DESC。固定。 您还缺少OVER 关键字,并且您没有在子查询中选择更新的`。 我今天真的不是最好的:-(谢谢@JonSenchyna 你也没有过滤掉itemStatus <> 'active'的行。【参考方案2】:
SELECT col1, col2, col3, col4, updated
FROM   MeetingDetails 
WHERE  updated in (
    SELECT      MAX(updated)
    FROM        MeetingDetails
    WHERE       itemStatus = 'active'
)

这应该是您正在寻找的。从这里开始,如果您需要进一步缩小范围,只需在 where 子句中添加更多条件即可。

【讨论】:

谢谢,这也很棒!【参考方案3】:

这里是查询:

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),此选择可能返回多于一行,因此此查询可能返回多个节点。

【讨论】:

谢谢,这也很棒!【参考方案4】:

带有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')

【讨论】:

以上是关于SQL Server:从最大日期/最新日期的记录中获取数据的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server:来自多行的最新属性集和日期

SQL Server:如何根据最近的日期时间检索所有记录

使用日期字段使用sql server获取前一天记录

如何设置子查询以获取具有最新日期和最大 ID 的单个记录?

使用SQL查询物料最新采购价格的示例

SQL Server 2005 视图