2017-02-07 5 views
0

У меня есть аналогичный вопрос, который, как мне кажется, должен размещаться здесь. Нужна помощь Сотрудникам, которые отсутствовали на протяжении 3 или более дней подряд. Предположим, что все дни являются рабочими днями без выходных в субботу/воскресенье/в другие дни.Последовательные записи в oracle SQL

В таблице ниже мне нужны 20342123 и 20311111 в результирующем наборе. Сотрудник 20311333 взял 4 листа, но они не последовательны.

Благодарим за помощь.

Emp Id  | AsofDate  | Comment 
---------------------------------- 
20342123 | 1-JAN-2017| Absent 
20342123 | 2-JAN-2017| Absent 
20342123 | 3-JAN-2017| Absent 
20311111 | 1-JAN-2017| Absent 
20311111 | 2-JAN-2017| Absent 
20311111 | 3-JAN-2017| Absent 
20311333 | 5-JAN-2017| Absent 
20311333 | 6-JAN-2017| Absent 
20311333 | 8-JAN-2017| Absent 
20311333 | 9-JAN-2017| Absent 
20322222 | 1-JAN-2017| Absent 
20322222 | 2-JAN-2017| Absent 

ответ

1

Хотя вы можете применить «пробелы-и-острова» решение, я думаю, что lag()/lead() проще для решения этой проблемы:

select distinct emp_id 
from (select t.*, 
      lead(date) over (partition by empid order by date) as date_1, 
      lead(date, 2) over (partition by empid order by date) as date_2 
     from t 
     where comment = 'Absent' -- not sure if this is important 
    ) t 
where date_1 = date + 1 and date_2 = date + 2; 
+0

спасибо Гордон Линофф. Я пропустил одну точку там. Правильный вопрос: «3 или БОЛЬШЕ последовательных случаев ...». Да комментарий = 'Отсутствует', поскольку другие значения также будут там. –

+0

@DevadasWagle. , , Это находит 3 подряд. Следовательно, он находит 3 или более подряд. –

+0

Извините, но он не работает даже для трех последовательных строк. Я знаю, что в таблице есть записи, но не отображаются в результатах. –

Смежные вопросы