sql - SQL检查日期值是否连续5天
问题描述
我有一个包含日期值的日期列,例如,我想查看所有日期值是否连续包含 5 天
2019-03-15 ... 2021-06-01 2021-06-02 2021-06-03 2021-06-04 2021-06-05 …… 2021-07-01
在这种情况下返回 true
唯一的问题是语法必须适用于 SQL Server 2008 R2 版本
解决方案
您可以减去一个枚举值,这对于相邻日期是恒定的。然后汇总和计数。
因此,要获得 5 或更大的所有序列:
select min(date), max(date), count(*)
from (select t.*, row_number() over (order by date) as seqnum
from t
) t
group by dateadd(day, - seqnum, date)
having count(*) >= 5;
如果要返回'true'
/'false'
值:
select (case when exists (select min(date), max(date), count(*)
from (select t.*, row_number() over (order by date) as seqnum
from t
) t
group by dateadd(day, - seqnum, date)
having count(*) >= 5
)
then 'true' else 'false'
end) as flag
推荐阅读
- flutter - 如何从 StreamBuilder 将数据正确保存到我的模型中
- webpack - Webpack 5assetModuleFilename 避免文件名中出现非法字符
- wiremock - Wiremock 快照/编辑快照 URL
- c++ - 非法 glutInit() 重新初始化尝试:如何取消初始化 glut?
- python - Python aiohttp - 登录页面并获取内容
- reactjs - 安装后 React Ref 获取属性
- json - CASS_ERROR_SERVER_INVALID_QUERY:无法将 JSON 字符串解码为映射:org.codehaus.jackson.JsonParseException:意外字符('?'
- react-native - 单击 RadioButton React native 后显示 Faltlist
- javascript - 反应中异步函数中的意外保留字“等待”
- arrays - 将数据对象转换为结构数组