SQL Server日期之间的差异

时间:2016-08-23 04:44:12

标签: sql sql-server sql-server-2008

enter image description here

我需要创建一个查询,将日期与相同的ID_2'进行比较。

如果列中的日期之间的差异" ProdDateTime"在#34; Sold"列中超过7和日期之间的差异是超过1应该显示此行。
这是一个例子: 第12行和第13行与ID_2 = 444之间的差异在列ProdDateTime中大于7,在列Sold中大于1,这就是为什么它应该将此行显示为错误以及以下所有内容(14 ,15)因为他们有同样的错误。

P.S。我使用row_numberdense_rank相应地制作了ID_1ID_2列。

你有关于如何这样做的任何提示吗? 提前谢谢大家!

2 个答案:

答案 0 :(得分:0)

我假设日期在" ProdDateTime"列总是按递增顺序排列。因此,这里我们需要比较ProdDateTime列的上一行值和下一行值的日期。我使用LAG和LEAD分析函数来解决这个问题。它只是给你一个暗示,我已经实现了下面的单一条件,也许它对你有用: -

    ;WITH ResultData 
    AS
    (
        SELECT *
            ,LEAD(ProdDateTime)  OVER (PARTITION BY ID_2 ORDER BY ID_2 ) AS Lead
            ,LAG(ProdDateTime)  OVER (PARTITION BY ID_2 ORDER BY ID_2 ) AS Lag
            ,DATEDIFF(DAY, ProdDateTime, LEAD(ProdDateTime)  OVER (PARTITION BY ID_2 ORDER BY ID_2 )) AS LeadDiff
            ,DATEDIFF(DAY, LAG(ProdDateTime)  OVER (PARTITION BY ID_2 ORDER BY ID_2 ), ProdDateTime) AS LagDiff
        FROM tb
    )

    SELECT * 
    FROM ResultData
    WHERE LeadDiff > 1 OR LagDiff > 1

如果您不了解上述功能,请搜索相同内容。 祝你好运!

答案 1 :(得分:0)

您可以选择nextprevious行,如下所示。

SELECT
    * -- Your DATEDIFF operations
FROM
    Tbl CurrentRow LEFT JOIN 
    Tbl PreviousRow ON CurrentRow.ID_1 = (PreviousRow.ID_1 + 1) 
                       CurrentRow.ID_2 = PreviousRow.ID_2 
                   LEFT JOIN
    Tbl NextRow     ON CurrentRow.ID_1 = (NextRow.ID_1 - 1) 
                       CurrentRow.ID_2 = NextRow.ID_2