Сократить последовательные строки с одинаковым значением в столбце до одной строки - PullRequest
1 голос
/ 19 сентября 2019

Я пытаюсь создать биометрическую систему посещаемости, которая получает данные от биометрического устройства.

Структура таблицы посещаемости, полученной от устройства, выглядит примерно так:

sample_table

Изначально в таблице было много данных с более чем одним emp_no, но я создал хранимую процедуру, которая извлекает сведения об одном сотруднике на конкретную дату, как показано выше.Проблема, с которой сейчас сталкиваются, заключается в том, что мне нужно проанализировать эту таблицу и реструктурировать ее (пересоздать другую таблицу), чтобы в ней были чередующиеся проверки и проверки (после каждой проверки должна следовать проверка и наоборот) и для последовательной проверки.проверки, я должен взять более раннюю, а для последовательных проверок, я должен взять самую последнюю.Любые идеи о том, как это сделать, будут очень благодарны.Спасибо.

1 Ответ

0 голосов
/ 19 сентября 2019

Используйте функции окна lag() и lead():

select emp_id, att_date, att_time, status
from (
    select 
        emp_id, att_date, att_time, status, 
        case 
            when status = 'checkin' then lag(status) over w is distinct from 'checkin'
            else lead(status) over w is distinct from 'checkout'
        end as visible
    from my_table
    window w as (partition by emp_id, att_date order by att_time)
    ) s
where visible

Db <> скрипка.

...