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

SQL中基于ID按日期小时去重,需保留CheckTime的datetime格式

问题描述

现有SQL语句

SELECT 
    ,[ID]
    ,[Name]
    ,[Age]
    ,[CheckTime]
FROM Record

当前数据

ID姓名年龄检查时间
12Alex232022-08-16 06:16:46.000
13Cynthia452022-08-16 06:16:53.000
14Kwabeng572022-08-16 07:54:44.000
14Kwabeng572022-08-16 07:54:51.000
15Asante232022-08-16 07:54:32.000
16Leticia982022-08-16 07:58:32.000
16Leticia982022-08-16 07:45:49.000
12Mercy232022-08-16 07:42:36.000

当前表中,ID为14、16的记录仅CheckTime不同,需去除其中一条重复记录,同时保留CheckTime的datetime格式(不能转为字符串,否则无法后续按日期筛选)。

期望数据

ID姓名年龄检查时间
12Alex232022-08-16 06:16:46.000
13Cynthia452022-08-16 06:16:53.000
14Kwabeng572022-08-16 07:54:44.000
15Asante232022-08-16 07:54:32.000
16Leticia982022-08-16 07:58:32.000
12Mercy232022-08-16 07:42:36.000

遇到的问题

曾尝试用以下SQL去重,但该语句将CheckTime转为字符串类型,导致后续无法按日期筛选:

SELECT ID, Name, Age, FORMAT(CheckTime, 'yyyy-MM-dd:HH') AS [DateHour]
    , COUNT(Name) AS [Age]
FROM Record
GROUP BY ID,Name, Age, FORMAT(CheckTime, 'yyyy-MM-dd:HH'),

解决方案

可以使用窗口函数ROW_NUMBER()实现分组去重,同时完整保留CheckTime的datetime类型。核心逻辑是按ID+Name+Age分组,给每组内的记录按CheckTime排序,只保留排序后序号为1的记录。

方法1:保留每组中最早的CheckTime

WITH RankedRecords AS (
    SELECT 
        ID,
        Name,
        Age,
        CheckTime,
        -- 按ID+姓名+年龄分组,组内按检查时间升序排序,最早的记录序号为1
        ROW_NUMBER() OVER (PARTITION BY ID, Name, Age ORDER BY CheckTime ASC) AS rn
    FROM Record
)
SELECT ID, Name, Age, CheckTime
FROM RankedRecords
WHERE rn = 1;

方法2:保留每组中最晚的CheckTime

如果需要保留最新的检查时间,只需将排序方式改为降序:

WITH RankedRecords AS (
    SELECT 
        ID,
        Name,
        Age,
        CheckTime,
        -- 按ID+姓名+年龄分组,组内按检查时间降序排序,最晚的记录序号为1
        ROW_NUMBER() OVER (PARTITION BY ID, Name, Age ORDER BY CheckTime DESC) AS rn
    FROM Record
)
SELECT ID, Name, Age, CheckTime
FROM RankedRecords
WHERE rn = 1;

说明

  • PARTITION BY ID, Name, Age:明确分组依据,确保只有当ID、姓名、年龄完全相同时才判定为重复组(比如ID=12的两条记录因姓名不同,不属于重复)。
  • ROW_NUMBER()会给每组内的记录分配唯一序号,筛选rn=1即可得到每组的单条记录。
  • 该方案完全保留CheckTime的datetime类型,后续可正常执行日期范围筛选等操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:48:21