use*_*693 0 sql t-sql sql-server date sql-server-2008
我有以下示例数据:
id Ref User Task Refernce Start End rn
1 12222 Joe Bloggs Task 1 Ref001 24/02/2014 20/07/2014 1
2 12568 Joe Bloggs Task 1 Ref001 25/07/2014 12/10/2014 2
3 14757 Joe Bloggs Task 1 Ref001 29/10/2014 11/01/2015 3
4 12493 Joe Bloggs Task 1 Ref001 7/01/2015 6/04/2015 4
5 13694 Joe Bloggs Task 2 Ref001 3/04/2014 20/07/2014 1
6 85569 Joe Bloggs Task 2 Ref001 18/07/2014 12/10/2014 2
7 54769 Joe Bloggs Task 2 Ref001 24/11/2014 5/01/2015 3
8 89716 Joe Bloggs Task 2 Ref001 12/01/2015 6/04/2015 4
Run Code Online (Sandbox Code Playgroud)
我需要检查任何开始/结束日期在任务类型相同的前一个开始/结束日期之间的位置.
在上面的数据中,标记为重叠的行将是:
4 12493 Joe Bloggs Task 1 Ref001 7/01/2015 6/04/2015 4
Run Code Online (Sandbox Code Playgroud)
因为07/01/2015重叠的开始日期是3的结束日期11/01/15
6 85569 Joe Bloggs Task 2 Ref001 18/07/2014 12/10/2014 2
Run Code Online (Sandbox Code Playgroud)
因为因为18/07/2014重叠的开始日期是1结束日期20/07/14
如果不使用游标,有人可以建议如何做到这一点吗?
您可以lag()在SQL Server 2012+中执行此操作.在SQL Server 2008中,我建议join:
select s.*,
(case when s.start between s2.start and s2.end then 1 else 0 end) as flg
from sample s left outer join
sample sprev
on s.id = sprev.id + 1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
722 次 |
| 最近记录: |