2017-09-20 7 views
1
ID  Date I  Date II 
----------------------------- 
1000 1/6/2016 2/3/2016 
1000 1/28/2016 2/25/2016 
1000 3/11/2016 4/8/2016 
1000 4/8/2016 5/6/2016 
1000 5/10/2016 6/7/2016 

ich eine Fahne erstellen möchten, die mir sagt, wenn 2016.02.03 weniger als 2016.01.28 ist, 2016.02.25 weniger als 3/11/2016 und so weiter .. in SQL Server.SQL Server Vergleich von zwei Zeilen in zwei verschiedenen Spalten

Wie würde ich das machen?

Antwort

1

können Sie wie unten führen verwenden:

Select *,Flag = Case when [date II] < lead([date I]) over(partition by id order by [date I]) then 1 else 0 end 
    from #yourdate 

Ausgabe wie folgt:

+------+------------+------------+------+ 
| Id | date I | date II | Flag | 
+------+------------+------------+------+ 
| 1000 | 2016-01-06 | 2016-02-03 | 0 | 
| 1000 | 2016-01-28 | 2016-02-25 | 1 | 
| 1000 | 2016-03-11 | 2016-04-08 | 0 | 
| 1000 | 2016-04-08 | 2016-05-06 | 1 | 
| 1000 | 2016-05-10 | 2016-06-07 | 0 | 
+------+------------+------------+------+

Wenn Sie SQL Server < 2012 verwenden, dann yo Sie können die Abfrage wie folgt verwenden:

;With cte as (
    Select *, RowN = Row_Number() over(partition by Id order by [date I]) from #yourdate 
) 
Select a.*, Flag = Case when a.[date II] < a1.[date I] then 1 else 0 end 
from cte a left join cte a1 
on a.RowN = a1.RowN - 1 
+0

Vielen Dank, das hat funktioniert :) – NM24

2

Unter der Annahme, dass die Werte richtig als Daten gespeichert sind, verwenden nur case und lead():

select (case when date2 < lead(date1) over (partition by id order by date1) 
      then 1 else 0 
     end) as is_less_than 
Verwandte Themen