You need to enable JavaScript to run this app. SQL实现:提取contract表同ID下END为9999-12-31的重复记录的最早Begin日期
优惠活动
大模型
产品
解决方案
定价
更多

SQL实现:提取contract表同ID下END为9999-12-31的重复记录的最早Begin日期

优化方案

原SQL跑起来要么报错、要么漏数据、要么算得慢:

  • 重复判断写死了count=2,要是某个ID下有3条END为9999-12-31的记录,直接就被滤掉了,不符合“存在重复就纳入统计”的需求
  • 最后group by写的是FUN_ID,跟select里的ID字段对不上,数据库直接抛错
  • 嵌套exists的写法太绕:每扫到一条目标记录,就要回头算一次同ID下的目标记录总数,同一个ID算好几遍,白耗性能

更简洁高效的实现遵循“先缩小数据范围、再分组统计”的思路,仅需单次扫描即可完成计算:

SELECT
  ID,
  MIN(Begin) AS Begin
FROM contract
-- 先过滤出所有END为9999-12-31的记录,跳过无关数据
WHERE END = '9999-12-31'
GROUP BY ID
-- 只要同ID下这类记录数大于1,就判定为存在重复
HAVING COUNT(*) > 1

执行效果

针对示例数据,返回结果与预期完全匹配:

IDBegin
202016-01-01
302019-03-01

ID=10在END为9999-12-31的记录仅存在1条,不满足重复判断条件,因此不会出现在结果集中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 15:06:07