You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用T-SQL筛选出表中具有最新datetime的行?

嘿,这个需求在T-SQL里有好几种实用的实现方式,我给你整理几个常用的,你可以根据你的表数据情况来选:

方法1:TOP 1 + ORDER BY(最直接的单行场景)

如果你的需求只是取一行最新时间的数据,这个写法最简单直观。假设你的表名叫YourTable,datetime类型的列是RecordTime,其他三列是ColA、ColB、ColC:

SELECT TOP 1 ColA, ColB, ColC, RecordTime
FROM YourTable
ORDER BY RecordTime DESC;

注意:如果有多个行的RecordTime是完全相同的最新值,这个方法只会返回其中随机的一行。

方法2:窗口函数(取所有同最新时间的行)

如果你的表可能存在多行共享同一个最新datetime值,而且你想把这些行都捞出来,用窗口函数RANK()或者ROW_NUMBER()就很合适:

WITH RankedRecords AS (
    SELECT 
        ColA, ColB, ColC, RecordTime,
        -- RANK()会给相同时间的行分配相同排名
        RANK() OVER (ORDER BY RecordTime DESC) AS TimeRank
    FROM YourTable
)
SELECT ColA, ColB, ColC, RecordTime
FROM RankedRecords
WHERE TimeRank = 1;

要是你还是只想取一行(哪怕有多个同时间的),把RANK()换成ROW_NUMBER()就行,它会给同时间的行分配不同的序号,筛选RowNum = 1就只会拿一行。

方法3:MAX()子查询(经典关联写法)

另一种经典思路是先找到表中最大的datetime值,再用这个值去匹配原表的行:

SELECT ColA, ColB, ColC, RecordTime
FROM YourTable
WHERE RecordTime = (SELECT MAX(RecordTime) FROM YourTable);

这个写法和用RANK()的效果一样,能取出所有时间等于最大值的行,逻辑也很好理解。

小提示

如果你的表数据量很大,记得给RecordTime列加个索引,不管用上面哪种写法,查询性能都会提升很多,尤其是排序和求最大值的操作会快不少。

内容的提问来源于stack exchange,提问作者Doe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:10:41