sql中获取到两条数据,怎么获取最新的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql中获取到两条数据,怎么获取最新的相关的知识,希望对你有一定的参考价值。

参考技术A 于是想到了最常用的,ORDER BY 通过排序可以利用 创建时间字段来排序+LIMIT 这样就可以获取到最近一条 (但是这个只是适用于查询一个code数据的操作)

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

【中文标题】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中获取到两条数据,怎么获取最新的的主要内容,如果未能解决你的问题,请参考以下文章

获取每个产品最新的两条线并获取价格和日期

从 Oracle 中选择最新的两条不同记录

sql如何获取数据库中最新的数据

sql语句获取表中最新数据

SQL查询从数据中获取最新价格?

SQL查询以逐块获取最新数据