SQL Server比较两个不同列中的两行

时间:2017-09-20 20:17:30

标签: sql sql-server

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

我想创建一个标志,告诉我2016年2月3日是否小于2016年2月28日,2016年2月25日小于2016年11月2日等等...在SQL Server中。< / p>

我将如何做到这一点?

2 个答案:

答案 0 :(得分:2)

假设这些值作为日期正确存储,只需使用caselead()

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

答案 1 :(得分:1)

您可以使用以下链接:

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

输出如下:

+------+------------+------------+------+
|  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 |
+------+------------+------------+------+

如果您使用SQL Server&lt; 2012年,您可以使用如下查询:

;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