Как мне получить ночную/дневную смену первой и последней с несколькими записями?
Как мне получить записи о моей ночной и дневной смене с несколькими записями посещаемости?
Verify_State identify when 0 = Time in and 1 = Time out
То, что я пробовал запросы, находится здесь, в этом. Скрипка[^]
Там, где проблема заключается в том, что user_id 14-это дневная смена, а user_id 15-ночная смена, что я не могу правильно получить посещаемость.
Ожидаемый Выход :
user_id verify_date verify_state prev_state next_state next_date 14 2019-11-05 07:23:00 0 1 1 2019-11-05 20:00:00 14 2019-11-06 07:23:00 0 1 0 2019-11-07 20:09:00 14 2019-11-08 07:18:00 0 1 1 2019-11-08 17:38:00 14 2019-11-11 07:20:00 0 1 1 2019-11-11 20:05:00 15 2019-11-12 19:57:00 0 1 0 2019-11-13 07:20:00
Что я уже пробовал:
Это тот самый запрос, который я уже пробовал :
with cte1 as ( select *, coalesce(lag(verify_state) over (partition by user_id order by verify_date asc),1) prev_state, coalesce(lead(verify_state) over (partition by user_id order by verify_date asc),0) next_state from tbl_excel_attendance ), cte2 as ( select *, lead(verify_date) over (partition by user_id order by verify_date asc) next_date from cte1 where (prev_state,verify_state,next_state) in ( (1,0,0),(1,0,1), (0,1,0) ) ) select * from cte2 where verify_state = 0 and next_date is not null order by 2,3
но если записей было так много, то она не получит правильную запись, если это будет так. как и ожидаемый результат.