sql - 在 SQL 中选择更改值的开始和结束日期
问题描述
我有一个包含帐户和历史状态更改的数据库
从历史代码中选择日期、帐户、OldStatus、NewStatus 按帐户、日期排序
日期 | 帐户 | 旧状态 | 新状态 |
---|---|---|---|
2020-01-01 | 12345 | 1 | 2 |
2020-10-01 | 12345 | 2 | 3 |
2020-11-01 | 12345 | 3 | 2 |
2020-12-01 | 12345 | 2 | 1 |
2020-01-01 | 54321 | 2 | 3 |
2020-09-01 | 54321 | 3 | 2 |
2020-12-01 | 54321 | 2 | 3 |
对于每个帐户,当状态 = 2 时,我需要确定开始日期和结束日期。另一个挑战是状态可以多次来回更改。SQL 中有没有办法在帐户位于 2 时至少在前两个时间范围内创建类似的东西?有任何想法吗?
帐户 | 开始Dt_1 | EndDt_1 | 开始Dt_2 | EndDt_2 |
---|---|---|---|---|
12345 | 2020-01-01 | 2020-10-01 | 2020-11-01 | 2020-12-01 |
54321 | 2020-09-01 | 2020-12-01 |
解决方案
我建议将此信息放在单独的行中:
select t.*
from (select account, date as startdate,
lead(date) over (partition by account order by date) as enddate
from t
) t
where newstatus = 2;
当帐户的状态为 时,这将为每个期间生成单独的行2
。这比将日期放在单独的列对中要好,因为您在编写查询时不需要知道状态 = 2 的最大周期数。
推荐阅读
- javascript - 出现错误:无法读取未定义的属性“长度”
- php - “/”laravel消息验证问题
- html - 将 URL 转换为以文件名作为链接文本的 HTML 文件
- python-3.x - MELT:不重复的多个值
- r - 运行 rails db:migrate with rolify 的问题
- c# - C# Windows 服务通过错误代码自行停止
- matplotlib - 是否可以在所有点都链接到 x 轴的 matplotlib 中绘制绘图?
- c++ - 检查字符串是否为 Lapindrome
- javascript - 无法从“node_modules\react-navigation-stack\lib\module\navigators\createStackNavigator.js”解析“react-navigation”
- android - 如何制作可折叠的ConstraintLayout?