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

SQL时间区间查询起止值相等时的重复数据去除问题

enter image description here

经测试,Chrome浏览器无法正常显示表格,但在Edge浏览器中可正常展示

问题原因

重复数据由两个问题共同导致:

  • 你使用BETWEEN做小时范围匹配属于双侧闭区间逻辑,只要小时数大于等于start_at的小时、小于等于end_at的小时就会被纳入结果。当end_at恰好为整点值时,提取到的小时数会和你生成的time字段(整点时间)完全对齐,把不属于统计范围的边界时段纳入结果。
  • 语句中同时写了SELECT DISTINCT和GROUP BY 1,2,3,4,5属于冗余写法,二者都是全字段去重逻辑,无法修正边界判断错误带来的重复行问题。

修复方案

直接改用时间值比较代替小时数提取判断,采用时段统计通用的左闭右开区间规则(即结束时间恰好等于整点time时不纳入统计),从根源避免边界计算错误,同时删除冗余的DISTINCT即可:

SELECT
  TIME(hour, 0, 0) AS time,
  date, 
  start_at,
  end_at,
  total 
FROM a, UNNEST(GENERATE_ARRAY(0, 23)) hour 
WHERE 
  TIME(hour, 0, 0) >= TIME(start_at)
  AND TIME(hour, 0, 0) < TIME(end_at)
GROUP BY 1,2,3,4,5

如果你的业务规则要求end_at和time相等时也要保留该条数据,只需要把第二个条件的<改成<=即可,不会再出现重复。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:06:09