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>
我将如何做到这一点?
答案 0 :(得分:2)
假设这些值作为日期正确存储,只需使用case
和lead()
:
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