基于更新语句的上一行结束日期等于下一行开始日期

时间:2019-07-03 01:19:17

标签: sql sybase-iq

我已经确定了培训人员的重叠日期,这些培训人员在开始日期和结束日期之间对用户进行了培训。现在,我需要确定其中一位培训师的结束日期与下一位培训师的开始日期相同的USER_ID。我需要将它们标记为“ Y”和“ N”。

当某些培训师的开始日期和结束日期与USER_ID的先前培训师的结束日期相同时,我遇到了一个问题。

UPDATE #SERVICE A
SET DIS_ADM_MATCH = CASE WHEN B.FROM_DATE = A.TO_DATE OR
                              A.FROM_DATE  = B.TO_DATE
                         THEN 'Y' ELSE 'N' END
FROM #SERVICE A
INNER JOIN #SERVICE B
ON A.USER_ID = B.USER_ID
AND A.TRAINER_ID <> B.TRAINER_ID;

1 个答案:

答案 0 :(得分:1)

我想你想要

update service
    set DIS_ADM_MATCH = (case when exists (select 1
                                           from service s2
                                           where s2.user_id = service.user_id and
                                                 s2.from_date = service.to_date
                                          )
                              then 'Y' else 'N'
                         end);