select distinct
shipperinf_coilid, max(PilerInf_CreateDate), max(ShipperInf_CreateDate)
from
tblL3SendProductionData
where
ShipperInf_CoilId not in (select distinct shipperinf_coilid
from table_2
where orderinf_ordernumber like 'b%')
and pilerinf_createdate != '1900-01-01 00:00:00.000'
group by
shipperinf_coilid
order by
max(PilerInf_CreateDate)
上述查询返回一个过程中的线圈列表及其开始日期和结束日期。我试图找到一种方法来找出线圈的结束日期和下一个线圈的开始日期之间的差异,以查看将另一个线圈加载到过程中花费了多少时间。例如,第1行的结束日期可以说是2013-01-01 07:00:00.000,第2行的开始日期是2013-01-01 07:01:00.000。我将在该特定行中寻找的结果集是1.
我知道我需要做一些事情来加入表格本身并添加到行中,但所需的语法和逻辑思维过程正在暗示我。谢谢你的帮助!
答案 0 :(得分:0)
好消息是,您在SQL Server 2012上引入了LEAD()
和LAG()
- 让您的任务变得非常轻松。 LEAD()
获取当前行并将其与下一行进行比较。 LAG()
反其道而行之。
这是我放在一起的一个简单例子:
create table #results (id int, startDate datetime, endDate datetime)
insert into #results
select 1, cast('10/1/2012' as datetime), cast('12/1/2012' as datetime)
insert into #results
select 1, cast('12/15/2012' as datetime), cast('12/31/2012' as datetime)
insert into #results
select 1, cast('2/1/2013' as datetime), cast('12/1/2013' as datetime)
select id, startDate, endDate,
DATEDIFF(day, endDate, LEAD(startDate) OVER (ORDER BY id)) DaysUntilNextCoil,
DATEDIFF(day, startDate, LAG(endDate) OVER (ORDER BY id)) DaysSincePreviousCoil
from #results
drop table #results