【问题标题】:update statement based end date of previous row equaling start date of next row更新语句基于上一行的结束日期等于下一行的开始日期
【发布时间】:2019-11-13 15:34:47
【问题描述】:

我从培训用户的培训师那里确定了开始日期和结束日期之间的重叠日期。我现在需要确定其中一位培训师的结束日期与其下一位培训师的开始日期相同的 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) 用您正在使用的数据库标记您的问题。 (2) 提供样本数据和期望的结果。

标签: sql sap-iq


【解决方案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);

【讨论】:

  • 感谢您的反馈,很遗憾我无法在条件表达式中使用子查询,因为它不受支持。
  • @Leigh.Granger 。 . .我不记得在 Sybase IQ 中存在这样的限制。你确定这是真正的问题吗? (我修复了表别名的问题。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-26
  • 1970-01-01
  • 2022-01-22
  • 2022-06-23
  • 2019-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多