我需要创建一个查询,将日期与相同的ID_2'进行比较。
如果列中的日期之间的差异" ProdDateTime"在#34; Sold"列中超过7和日期之间的差异是超过1应该显示此行。
这是一个例子:
第12行和第13行与ID_2 = 444之间的差异在列ProdDateTime中大于7,在列Sold中大于1,这就是为什么它应该将此行显示为错误以及以下所有内容(14 ,15)因为他们有同样的错误。
P.S。我使用row_number
和dense_rank
相应地制作了ID_1
和ID_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)
您可以选择next
和previous
行,如下所示。
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