我有一个查询,试图将我需要选择一个日期的地方,然后从另一个列中选择下一个发生日期。
我的选择语句是:
Select tblOEEDownTime.LineNumber,
tblOEEDownTime.SampleDate as 'Down Time',
tblOEEUpTime.Sampledate as 'Up Time',
(DATEDIFF(minute, tblOEEDownTime.SampleDate, tblOEEUpTime.Sampledate )) as 'Minutes Down',
tblOEEUpTime.Reason,
tblOEEUpTime.Comment as DownTime
from tblOEEDownTime JOIN
tblOEEUpTime on tblOEEDownTime.LineNumber = tblOEEUpTime.LineNumber
where TblOEEDownTime.SampleDate > '2020-09-14' and TblOEEDownTime.LineNumber like '6427' and tblOEEUpTime.SampleDate > tblOEEDownTime.SampleDate
Group by tblOEEDownTime.LineNumber, tblOEEDownTime.SampleDate, tblOEEUpTime.SampleDate, tblOEEUpTime.Reason, TblOEEUptime.Comment
在结果图中,我希望返回的值是突出显示的行。我或多或少希望将停机时间与相关的停机时间之后的下一个正常运行时间联系起来。
答案 0 :(得分:0)
您可以使用cross apply
为每个停机时间行提取下一个正常运行时间行。
样本数据
create table tblOEEDownTime
(
LineNumber int,
SampleDate datetime
);
insert into tblOEEDownTime (LineNumber, SampleDate) values
(6427, '2020-09-16 10:00:00'),
(6427, '2020-09-16 12:00:00'),
(6427, '2020-09-16 15:00:00');
select * from tblOEEDownTime;
create table tblOEEUpTime
(
LineNumber int,
SampleDate datetime,
Reason nvarchar(20),
Comment nvarchar(20)
);
insert into tblOEEUpTime (LineNumber, SampleDate, Reason, Comment) values
(6427, '2020-09-16 10:01:00', 'Replenish', null),
(6427, '2020-09-16 10:03:00', 'Testing', 'Drew'),
(6427, '2020-09-16 10:05:00', 'Cleaning', null),
(6427, '2020-09-16 12:05:00', 'Replenish', null),
(6427, '2020-09-16 12:08:00', 'Testing', 'Drew'),
(6427, '2020-09-16 12:10:00', 'Cleaning', null),
(6427, '2020-09-16 15:30:00', 'Cleaning', null);
解决方案
select d.LineNumber,
d.SampleDate as [Down Time],
u.Sampledate as [Up Time],
datediff(MI, d.SampleDate, u.Sampledate) as [Minutes Down],
u.Reason,
u.Comment as DownTime
from tblOEEDownTime d
cross apply ( select top 1 u1.SampleDate, u1.Reason, u1.Comment
from tblOEEUpTime u1
where u1.LineNumber = d.LineNumber
and u1.SampleDate > d.SampleDate
order by u1.SampleDate ) u
where d.SampleDate > '2020-09-14'
and d.LineNumber = 6427;
结果
LineNumber Down Time Up Time Minutes Down Reason DownTime
----------- ----------------------- ----------------------- --------------- ----------- --------
6427 2020-09-16 10:00:00.000 2020-09-16 10:01:00.000 1 Replenish null
6427 2020-09-16 12:00:00.000 2020-09-16 12:05:00.000 5 Replenish null
6427 2020-09-16 15:00:00.000 2020-09-16 15:30:00.000 30 Cleaning null
交互式版本:fiddle。