0

问题 :

仅当还有一行包含Type='Travel' 在同一日期的同一 Act_ID 内。否则忽略。(应始终出现现场维修类型的记录)

Type = "Onsite Repair" OR Type = ("Calibration", "Interface Troubleshooting", "Setup/Configuration","Customer Applications") 仅当在同一个 Act_ID 上还有一行 Type="Travel" 时日期。否则忽略类型。

  • 源数据
ACT_ID 类型 START_TS END_TS
ACTID1 旅行 2016 年 7 月 20 日 13:00 2016 年 7 月 20 日 15:30
ACTID1 接口故障排除 2016 年 7 月 20 日 15:30 2016 年 7 月 20 日 19:00
ACTID1 旅行 2016 年 7 月 20 日 19:00 2016 年 7 月 20 日 21:00
ACTID1 旅行 2016 年 9 月 20 日 13:00 2016 年 9 月 20 日 15:30
ACTID1 现场维修 2016 年 9 月 20 日 15:30 2016 年 9 月 20 日 23:30
ACTID1 旅行 2016 年 9 月 21 日 13:00 2016 年 9 月 21 日 15:30
ACTID1 现场维修 2016 年 9 月 21 日 15:30 2016 年 9 月 21 日 23:30
ACTID1 旅行 2016 年 9 月 22 日 13:00 2016 年 9 月 22 日 15:30
ACTID1 现场维修 2016 年 9 月 22 日 15:30 2016 年 9 月 22 日 23:30
  • 预期数据
ACT_ID 类型 START_TS END_TS
ACTID1 接口故障排除 2016 年 7 月 20 日 15:30 2016 年 7 月 20 日 19:00
ACTID1 现场维修 2016 年 9 月 20 日 15:30 2016 年 9 月 20 日 23:30
ACTID1 现场维修 2016 年 9 月 21 日 15:30 2016 年 9 月 21 日 23:30
ACTID1 现场维修 2016 年 9 月 22 日 15:30 2016 年 9 月 22 日 23:30
4

1 回答 1

0

窗口聚合加限定的简单任务:

select *
from table
qualify Type = 'Onsite Repair'
     OR (Type = in ('Calibration','Interface Troubleshooting', 'Setup/Configuration','Customer Applications')
        -- row with Type='Travel'
          AND count(case when Type='Travel' then 1 end)
                         -- same Act_ID on the same date
              over (partition by Act_ID, cast(START_TS as date)  > 0
        ) 
于 2021-07-06T09:02:04.860 回答