我有这个查询,没有很多记录就可以全时间进出并超时,但是我遇到了多个记录,我有一个问题如何删除那些多条记录
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),(1,1),(0,1,0) )
)
select *
from cte2
where verify_state = 0
and next_date is not null
order by 2,3
例如,请参见此Fiddle。 14的user_id和2019/11/11的出席人数有问题,并且有多个记录。我该如何删除这些倍数并保留先进先出的功能。
Verify_state stands for 0 = Time In and 1 = Time out
预期输出:
user_id verify_date verify_state prev_state next_state next_date
14 2019-11-07 07:25: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 0 1 2019-11-11 20:05:00