SQL 服务器:不同行中两个日期的天数差异

SQL Server: difference in days for two dates in separate rows

我正在使用 SQL Server 2012,目前正在处理一份报告,要求我找出两个日期之间的天数差异。

基本上,对于特定的 ReportID,我试图找到(ReportCompletedDateReportType = 'PaperReceived')-(ReportCompletedDateReportType = 'Form Completed')

我试着在下面给出一些记录...

ReportID   ReportType       ReportCompletedDate  
-------------------------------------------------
450        PaperReceived      9/5/2013
450        Form Completed     8/13/2013
451        PaperReceived      9/7/2013
451        Form Completed     7/12/2013
452        PaperReceived      10/6/2013
452        Form Completed     3/13/2013

所以,例如 ReportID = 450,我想在几天内得到 9/5/2013 - 8/13/2013

如果有人也知道如何在日历日和工作日执行此操作,那就太棒了...但至少日历日应该没问题。

我不确定如何解决这个问题,通常当两个日期排成一行时,我更容易弄清楚,但是当日期在不同的行中时我不确定如何解决。如有任何建议,我们将不胜感激。

您可以进行自连接以使其显示在 "one line" 上。像这样:

SELECT DateDiff(day,BASE.ReportCompleteDate, FORM.ReportCompleteDate) as Diff
FROM TABLE_NAME_YOU_DID_NOT_SAY BASE
LEFT JOIN TABLE_NAME_YOU_DID_NOT_SAY FORM ON BASE.ReportId = FORM.ReportID AND FORM.ReportType = 'Form Completed'
WHERE BASE.ReportType = 'PaperRecieved'

请在下面找到一种方法...

SELECT RCVD.REPORTID
    , DATEDIFF(DAY, RCVD.REPORTCOMPLETEDDATE, CMPLD.REPORTCOMPLETEDDATE) DAY_DIFF
FROM (
    SELECT REPORTID
        , REPORTCOMPLETEDDATE
    FROM REPORTS
        WHERE REPORTTYPE = 'PaperReceived'
) RCVD
    JOIN (
    SELECT REPORTID
        , REPORTCOMPLETEDDATE
    FROM REPORTS
        WHERE REPORTTYPE = 'Form Completed'
) CMPLD
    ON RCVD.REPORTID = CMPLD.REPORTID