使用匹配字段减去两个日期,并在SQL表中减去另一个特定字段值

时间:2016-07-22 02:33:59

标签: sql sql-server tsql

我需要获得在同一个表中表示为行的两个事件之间的时差。其中,该行包含以下字段:

JobNum
EventDate
Event

Event字段用于查看该事件是该作业的开始还是结束。

我需要获得EventDate字段与JobNum相同的时间差异。由于单个JobNum可能有多个事件,因此我还需要指定JobNum相同,并且只需EventDate= 'Starting'从行中EventDate = 'Finished'减去行Starting (每Finished只会有一个JobNum和一个Select a.[AutoNumber], DATEDIFF(SECOND, (SELECT m.EventDate FROM [myTable] m WHERE m.Event = 'Starting' and a.JobNum= m.JobNum), (SELECT m.EventDate FROM myTable m WHERE m.Event = 'Finished' and a.JobNum= m.JobNum) ) From myTable a 个事件。

以下是我已经得到但它不起作用:

{{1}}

部分运行,但随后出现以下错误:

  

子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。

我也看了一下这个问题,但无法弄清楚如何修改代码以适应我的情况。 How to get difference between two rows for a column field?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

如果我正确理解您的问题,可以使用conditional aggregation选择一个选项:

Select [AutoNumber], 
       datediff(second, 
                max(case when event = 'starting' then EventDate end),
                max(case when event = 'Finished' then EventDate end)
       )
From myTable a 
Group By [AutoNumber]