【发布时间】:2019-05-24 06:26:58
【问题描述】:
create table PrinterData(
Dt DateTime not null,
Status nvarchar(50) not null
)
insert into PrinterData
values
('05.24.2019 00:00:00', 'READY'),
('05.24.2019 00:01:00', 'READY'),
('05.24.2019 00:02:00', 'NO PAPER'),
('05.24.2019 00:03:00', 'UNKNOWN'),
('05.24.2019 00:04:00', 'UNKNOWN'),
('05.24.2019 00:05:00', 'READY'),
('05.24.2019 00:06:00', 'READY'),
('05.24.2019 00:07:00', 'READY'),
('05.24.2019 00:08:00', 'NO PAPER'),
('05.24.2019 00:09:00', 'UNKNOWN'),
('05.24.2019 00:10:00', 'HAS PAPER'),
('05.24.2019 00:11:00', 'NO PAPER')
我需要知道READY状态和下一个READY或HAS PAPER之间的时间间隔,除了UNKNOWN地位。 未知我需要跳过。 结果应如下所示:
这是我的查询,但我不喜欢使用交叉/外部应用。在性能和速度方面,我需要您的建议,如何修改此查询。
select a.Dt, a.Status, b.Dt as Dt_Next_Status, b.Status as Next_Status, DATEDIFF(SECOND, a.Dt, b.Dt) as Diff from PrinterData a
outer apply
(
select top 1 Dt, Status from PrinterData where Dt > a.Dt and Status not in ('UNKNOWN', 'NO PAPER')
) b
where a.Status = 'NO PAPER'
【问题讨论】:
标签: sql sql-server tsql sql-server-2012