sql - 在 Select 语句中,根据日期间隔添加记录
解决方案
首先,考虑以下查询,它会产生缺失的记录。
select
StopTime StartTime,
NextStartTime StopTime,
datediff(minute, StopTime, NextStartTime) DurationMin
from (
select StopTime, lead(StartTime) over(order by StartTime) NextStartTime
from mytable
) t
where StopTime < NextStartTime
子查询使用窗口函数检索每条记录的下一个开始时间lead()
;然后,对于后跟间隙的每条记录,外部查询会生成一条记录来填充它。
然后,您可以使用union all
带上您的表格,并带有一个order by
用于演示的子句:
(
select coil, StartTime, StopTime, DurationMin from mytable
union all
select
null,
StopTime,
NextStartTime,
datediff(minute, StopTime, NextStartTime) DurationMin
from (
select StopTime, lead(StartTime) over(order by StartTime) NextStartTime
from mytable
) t
where StopTime < NextStartTime
)
order by StartTime
线圈| 开始时间 | 停止时间 | DurationMin :-------- | :------------------------ | :------------------------ | ----------: 27020-100 | 2019-09-27 10:05:00.000 | 2019-09-27 18:30:00.000 | 36 空 | 2019-09-27 18:30:00.000 | 2019-09-27 20:06:00.000 | 96 27020-100 | 2019-09-27 20:06:00.000 | 2019-09-27 20:41:00.000 | 36
推荐阅读
- reactjs - MobX:@observale 不会唤起渲染
- javascript - onpopstate 并不总是被触发
- django - 数据模型迁移后,管理站点未同步
- autodesk-forge - 如何获得 Autodesk Composite Design 的实际尺寸(来自 Autodesk 数据管理 Api)
- javascript - Mongoose 查询无法构造
- r - 通过 R 中的级别总和删除 data.frame 中的列
- jquery - 如何使用jquery在点击时更改表格行的文本
- excel - Excel 如果函数错误
- python - 替换 Python DataFrame 列中的字符
- batch-file - windows - reg 添加忽略 /f