SQL查询连续日期记录并统计分组连续天数问题求助
问题根因
你的原有代码计算行号时未按cazi、cdip分组,所有分组的日期混在一起全局排序,生成的DateGroup标识无法区分不同分组下的独立连续区间,因此无法拆分多段日期。
修正后SQL代码
WITH dateGroup AS ( SELECT cazi, cdip, [date], -- 按cazi、cdip分组后内部按日期排序,计算连续区间标识 DateGroup = DATEADD(dd, - ROW_NUMBER() OVER (PARTITION BY cazi, cdip ORDER BY [date]), [date]) FROM malt -- 同一个分组下同一天有多条重复数据时去重 GROUP BY cazi, cdip, [date] ) SELECT cazi, cdip, date1 = MIN([date]), date2 = MAX([date]), num_dd = DATEDIFF(dd, MIN([date]), MAX([date])) + 1 FROM dateGroup GROUP BY cazi, cdip, DateGroup ORDER BY cazi, cdip, date1
注意事项
- 如果你的
date字段是字符串存储(格式为dd/mm/yyyy),需要先转为日期类型避免计算错误,把所有[date]替换为CONVERT(DATE, [date], 103)即可 - 以上代码兼容SQL Server语法,其他数据库只需调整日期函数的写法即可
内容的提问来源于stack exchange,提问作者neotrojan
相关产品推荐
相关产品推荐

