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

SQL如何删除近24小时内同一用户超过3条的条目,仅保留最早的3条?

实现SQL(按数据库支持情况选择)


1. 支持窗口函数的数据库(MySQL 8.0+/PostgreSQL/SQL Server/Oracle等)

优先使用窗口函数实现,逻辑更清晰:

DELETE t
FROM 你的表名 t
INNER JOIN (
    SELECT 
        Name, 
        `Date`,
        -- 按用户分组,时间升序排序生成行号
        ROW_NUMBER() OVER(PARTITION BY Name ORDER BY `Date` ASC) AS row_num
    FROM 你的表名
    -- 筛选近24小时的记录
    WHERE `Date` >= NOW() - INTERVAL 24 HOUR
) AS ranked_records
ON t.Name = ranked_records.Name 
AND t.`Date` = ranked_records.`Date`
-- 只删除行号超过3的记录,保留最早3条
WHERE ranked_records.row_num > 3;

注意:如果表存在主键字段,建议用主键做关联条件,避免同用户同时间的重复记录误删,关联条件改为t.主键字段 = ranked_records.主键字段即可。


2. 不支持窗口函数的低版本数据库(如MySQL 5.x)

可使用关联子查询实现:

DELETE t
FROM 你的表名 t
WHERE `Date` >= NOW() - INTERVAL 24 HOUR
AND 3 < (
    SELECT COUNT(*)
    FROM 你的表名 t1
    WHERE t1.Name = t.Name 
    AND t1.`Date` >= NOW() - INTERVAL 24 HOUR
    AND t1.`Date` < t.`Date`
);

注意事项

执行删除前建议先将语句中的DELETE t替换为SELECT *,确认待删除的记录符合预期后再执行删除操作,避免数据误丢失。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:15:00