穿过桌子

时间:2013-04-15 00:33:45

标签: sql sql-server

我有一张表格,其中包含候选人培训课程的开始和结束日期,需要通过表格检查候选人以前的记录结束日期是否在当前记录开始日期之前。

换句话说,我需要检查候选人培训记录是否重叠,如果他们这样做,我需要能够将不良记录发送到另一个表。

我在这里添加了一个示例,其中所有日期都不正确,因为所有结束日期都在下一个记录开始日期之后。

我尝试过while循环和游标,但是我无法看到一种方法来存储一个记录中的值,同时继续下一个记录以进行比较。 感谢。

PERS_ID PERS_TYPE_SD    PERS_TYPE_ED
6444    2006-08-01 00:00:00.000 2018-07-29 00:00:00.000
6444    2009-08-01 00:00:00.000 2012-07-31 00:00:00.000
6444    2007-08-01 00:00:00.000 2009-07-31 00:00:00.000

1 个答案:

答案 0 :(得分:1)

select t1.*, t2.*
from table as t1 
join table as t2 
  on t2.PERS_TYPE_SD > t1.PERS_TYPE_SD 
 and t2.PERS_TYPE_SD < t1.PERS_TYPE_ED 
 and t1.PERS_ID < t2.PERS_ID  
order by  t1.PERS_ID, t2.PERS_ID