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

SQL查询实现返回每日同TicketID/Title的最后一行记录

需求说明

需要实现的数据库查询规则如下:

  • 相同TicketID分布在不同日期时,不做去重处理
  • 相同TicketID在同一天重复出现时,去除重复条目
  • 同日同TicketID的重复记录中,仅保留当日ID最大(最后生成)的那条记录
原SQL存在的问题

原语句无法生效是因为三处逻辑/语法错误:

  • 窗口函数语法错误:row_number()的分区逻辑写法规整错误,要实现「同日同TicketID为一组」的分区,需要将Date和TicketID共同作为分区字段,不能在partition by子句内嵌套group by
  • 多余的全局分组:子查询中写的GROUP BY Date属于无效逻辑,窗口函数计算时不需要额外全局分组,该语句会强制按日期聚合,丢失明细记录,直接破坏窗口函数的计算逻辑
  • 别名大小写不匹配:子查询中定义的排序列别名是大写TEMP,外层过滤条件写为Temp = 1,在大小写敏感的数据库实例中会直接报字段不存在的错误
修正后的SQL语句
SELECT 
    ID, TicketID, Date, Title, Status
FROM (
    SELECT 
        ID,
        TicketID, 
        Date, 
        Title, 
        Status, 
        ROW_NUMBER() OVER (PARTITION BY TicketID, Date ORDER BY ID DESC) AS temp
    FROM MyTableFruit
) t
WHERE temp = 1
ORDER BY Date;
逻辑说明
  • PARTITION BY TicketID, Date:将数据按「日期+TicketID」两个维度切分窗口,跨日期的同TicketID会被分到不同窗口,不会被去重,匹配第一条规则
  • ORDER BY ID DESC:每个窗口内的记录按ID倒序排列,ID最大(最后生成)的记录会被标记为行号1
  • 外层过滤temp = 1仅保留每个分组里排序第一的记录,匹配第二、第三条去重规则
  • 去掉了原语句里多余的内层GROUP BY Date和无意义的1=1条件,执行效率更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:01:21