sql - 在 MSSQL 中获取所有以下日期
问题描述
我有这些行的表:
DATE START | DATE END
2010-04-01 | 2018-09-30
2018-10-01 | 2019-02-13
2019-02-14 | 2019-07-24
2019-12-30 | 2020-01-31
我想得到这个结果:
DATE START | DATE END
2010-04-01 | 2019-07-24
2019-12-30 | 2020-01-31
这意味着我需要获取所有以下日期。谁是上一行的下一个到日期末尾。这在应用程序中用于计算公司员工的工作经验。有没有办法在不使用 CURSOR、WHILE 的情况下做到这一点......只使用 SQL 中的东西,如临时表、cte、更新、选择、删除......
解决方案
这是一个差距和孤岛问题。用于lag()
获取上一个端。然后是累积总和和聚合:
select min(date_start), max(date_end)
from (select t.*,
sum(case when prev_date_end >= dateadd(day, -1, date_start)
then 0 else 1
end) over (order by date_start) as grp
from (select t.*, lag(date_end) over (order by date_start) as prev_date_end
from t
) t
) t
group by grp;
推荐阅读
- javascript - 将数组传递给 c++ .wasm 模块。授权
- c# - Xamarin Forms DateTimePicker 自定义 ContentView 可绑定属性
- azure-ad-b2c - Azure AD B2C:与 msal 相关的自定义策略错误
- c# - 如何从 Shell 中添加的路线正确导航?
- c# - 根据日期时间排序列表
- c# - C#在winforms RichTextBox实例中动态将直引号更改为弯引号
- javascript - 如何根据 Xml 中的条件使字段不可见。奥多 14
- c# - 有没有办法按日期范围或 datetimeoffset 分组?
- asp.net - 将文件从 angular 11 形式传递到 asp.net core 5 web api 的最佳方式是什么
- python - 使用 Dataflow 管道 (python) 将多个 Json zip 文件从 GCS 加载到 BigQuery