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

SQL查询:提取表中每个col2(产品编号)对应的最新时间戳数据行

需求背景

现有存储产品多条录入数据的业务表,可参考如下语句创建测试表:

CREATE TABLE test(
    [coltimestamp] [datetime] NOT NULL,
    [col2] [int] NOT NULL,
    [col3] [int] NULL,
    [col4] [int] NULL,
    [col5] [int] NULL)
GO

Insert Into test 
values ('2021-12-06 12:31:59.000',1,8,5321,1234), 
('2021-12-06 12:31:59.000',7,8,4047,1111),
('2021-12-06 14:38:07.000',7,8,3521,1111),
('2021-12-06 12:31:59.000',10,8,3239,1234),
('2021-12-06 12:31:59.000',27,8,3804,1234),
('2021-12-06 14:38:07.000',27,8,3957,1234)

其中col2为产品编号,需要实现查询逻辑:对col2去重,仅保留每个产品对应coltimestamp最新的录入行,过滤同产品的旧时间戳条目。测试数据执行后预期返回4行,过滤掉col2=7、col2=27的旧时间戳记录。

实现SQL

方案1:窗口函数法(兼容SQL Server、MySQL 8.0+、PostgreSQL、Oracle等主流新数据库)

WITH ranked_data AS (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY col2 ORDER BY coltimestamp DESC) AS rn
    FROM test
)
SELECT coltimestamp, col2, col3, col4, col5
FROM ranked_data
WHERE rn = 1;

逻辑说明:按产品编号col2分组,组内按时间戳倒序排序,每组排名为1的就是该产品最新的录入记录。

方案2:子查询关联法(兼容低版本数据库,例如MySQL 5.x)

SELECT t1.*
FROM test t1
INNER JOIN (
    SELECT col2, MAX(coltimestamp) AS max_ts
    FROM test
    GROUP BY col2
) t2 ON t1.col2 = t2.col2 AND t1.coltimestamp = t2.max_ts;

逻辑说明:先分组查询每个产品的最新时间戳,再和原表关联匹配出对应完整行数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:15:03