table A
id date1 date2
row1 1 20170501 20170601
row2 1 20170501 99991231
row3 1 20170502 20170504
row4 1 20170501 20170604
row5 2 20170501 20170605
row6 2 20170501 20170506
我有改变要做,就是这样。我尝试使用etl,但结果并不令人满意。
将当前行(row1)的date1与下一个记录(row2)的date2进行比较,如果差异大于2天(+ positve),则只将该日期与该id一起获取。
在这种情况下,第2行是日期(即第2行的第2天),这必须一直运行,直到找到日期为止,如果找不到任何选择,则不能选择该记录。
请注意,我们必须根据id列以日期1降序排序,然后开始比较(日期2值默认为99991231为99999999)
答案 0 :(得分:0)
给定的查询将为您提供给定日期1具有以下日期2的日期(以天为单位)。
SELECT id,date1
,DATEDIFF(day,date1,LEAD(date2) OVER (ORDER BY id ASC, date1 DESC)) as [DayDiff]
FROM [table A]
然后,您只需存储到临时表中并过滤2天以上的日期。
SELECT * FROM #tempTb WHERE [DayDiff] > 2