如何计算SQL中2个不同行上2个字段的日期差异?

时间:2015-04-27 15:54:17

标签: sql

我有一个查询,我试图在2个不同的行中找到列中的日期差异。 StartTimeEndTime也在不同的表格中。以下是我的结果和查询的示例。我需要在第1行的EndTime和第2行的StartTime中找到差异。我需要在结果中一直继续这个序列。

StartTime               EndTime
2015-04-22 07:53:00.000 2015-04-22 08:27:00.000
2015-04-22 09:12:00.000 2015-04-22 10:46:00.000
2015-04-22 12:12:00.000 2015-04-22 13:06:00.000
2015-04-23 07:36:00.000 2015-04-23 08:34:00.000
2015-04-23 09:50:00.000 2015-04-23 10:48:00.000

这是我的疑问:

SELECT OP1.Op1DateTime as StartTime,
       OP2.Op7DateTime as EndTime
FROM SchOrPatCases pc
    inner join SchPatOrCaseTimesOp1 OP1 on OP1.CaseID = pc.PatientCaseID
    inner join SchPatOrCaseTimesOp2 OP2 on OP2.CaseID = OP1.CaseID
    inner join AbstractData a on a.AccountNumber = pc.AdmExtUrn
where pc.OperationRoomID in ('ORMAIN03')
and a.PatientClass not in  ('IN','INMCR','INMCD')
order by StartTime

2 个答案:

答案 0 :(得分:0)

试试这个:

    SELECT CAST(OP2.Op7DateTime - OP1.Op1DateTime AS TIME) AS DIFF_TIME
    FROM SchOrPatCases pc
    INNER JOIN SchPatOrCaseTimesOp1 OP1 on OP1.CaseID = pc.PatientCaseID
    INNER JOIN SchPatOrCaseTimesOp2 OP2 on OP2.CaseID = OP1.CaseID
    INNER JOIN AbstractData a on a.AccountNumber = pc.AdmExtUrn
    WHERE pc.OperationRoomID in ('ORMAIN03')
          and a.PatientClass not in  ('IN','INMCR','INMCD')
    ORDER BY StartTime

答案 1 :(得分:0)

坚持使用CTE

;with CTE as
(SELECT OP1.Op1DateTime as StartTime,
       OP2.Op7DateTime as EndTime
FROM SchOrPatCases pc
    inner join SchPatOrCaseTimesOp1 OP1 on OP1.CaseID = pc.PatientCaseID
    inner join SchPatOrCaseTimesOp2 OP2 on OP2.CaseID = OP1.CaseID
    inner join AbstractData a on a.AccountNumber = pc.AdmExtUrn
where pc.OperationRoomID in ('ORMAIN03')
and a.PatientClass not in  ('IN','INMCR','INMCD')
order by StartTime)
select DATEDIFF(dd, Endtime, Starttime)
from CTE

这会将字段视为位于同一个表中。 然后,您可以使用DATEDIFF或等效物来获得时间差异。