我的桌子有很多像这样的记录。
EventDateTime Event Desc EventType
10:00 AM Any Description Start
10:45 AM Any Description Stop
11:00 AM Any Description Start
11:25 AM Any Description Stop

基本上我想要两种事件类型之间的时差。 所以我想要这样的输出。
EventDateTime EventDateTime Event_Desc EventType EventType Diff
10:00 AM 10:45 AM Any Description Start Stop 45 Min

可以通过PIVOT或其他任何方式在SQL中使用吗? 我想在水晶报告中显示相同内容。
答案 0 :(得分:1)
我写了下面的代码,它似乎对我有用。我测试了一下,希望它有所帮助!
我使用dense_rank来模拟事件的ID,这样我就可以根据开始时间和结束时间识别单个事件,假设连续记录属于同一事件:
我创建了一个名为table2的新表(我的临时表,以重新创建您的问题),我存储了排名值:
if object_id('tempdb..#table2') is not null drop table #table2
create table #table2 (eventdatetime time, [rank] int, descr varchar(199),eventtype varchar(150))
insert into #table2
select eventdatetime, DENSE_RANK() OVER (PARTITION BY eventtype ORDER BY eventdatetime asc) AS Rank, descr, eventtype
from #table1 -- this is your table with events
order by eventdatetime
select t.eventdatetime start_time, t2.eventdatetime end_time, t2.descr [event_descr], t.eventtype, t2.eventtype, datediff(mi, t.eventdatetime, t2.eventdatetime) [Diff]
from #table2 t2 join #table2 t on t2.rank = t.rank and t2.eventdatetime > t.eventdatetime
order by t2.eventdatetime