Тестовое задание SQL Oracle

SQL Oracle

Есть таблица с исходными данными в виде:

user_id user_position date_position
1 1 01.01.2019
1 1 02.01.2019
1 2 03.01.2019
1 2 04.01.2019
1 1 05.01.2019
1 1 06.01.2019
2 1 01.01.2019
2 1 02.01.2019
2 1 03.01.2019
2 2 04.01.2019
2 2 05.01.2019
2 2 08.01.2019
2 2 10.01.2019

user_id – идентификатор сотрудника; user_position - идентификатор присутствия (1 = присутствовал, 2 = отсутствовал) date_position - календарная дата

Необходимо вычислить непрерывный период (по date_position), как дату начала вхождения в позицию position_start и дату окончания вхождения в позицию position_end в рабочий день по каждому сотруднику и в разрезе user_position.

Период нахождения сотрудника в позиции считается непрерывным периодом, если увеличение дат позиции date_position на один день проходит без смены позиции и не имеются разрывы дат date_position(не рабочие дни)

Сотрудник не может занимать две позиции в один день(базовое условие уникальности данных в таблице users_position)

Результат отсортировать по сотруднику и дате начала вхождения в непрерывный период и предоставить в виде:

user_id user_position position_start position_end
1 1 01.01.2019 02.01.2019
1 2 03.01.2019 03.01.2019
1 1 05.01.2019 06.01.2019
2 1 01.01.2019 03.01.2019
2 2 04.01.2019 05.01.2019
2 2 08.01.2019 08.01.2019
2 2 10.01.2019 10.01.2019

Пытаюсь использовать следующее:

SELECT user_id, user_position, MIN (date_position) dt_open, MAX (date_position) dt_close
FROM (
    SELECT tt.*, SUM (chng) OVER (PARTITION BY user_id, user_position ORDER BY date_position ASC) rnk
    FROM (
        SELECT users_position.*,
            CASE 
            WHEN COALESCE (
                LAG (MAX (date_position)) OVER (PARTITION BY user_id, user_position ORDER BY date_position ASC),
                date_position - 1) = (date_position - 1) THEN 0 
            ELSE 1 END chng
        FROM users_position
    ) tt
) tt
GROUP BY user_id, user_position, rnk
ORDER BY user_position, dt_open 

Но Oracle SQL Developer выдаёт ошибку:

ORA-00937: групповая функция не является одногруппной 00937. 00000 - "not a single-group group function" *Cause:
*Action: Error at Line: 5 Column: 31


Ответы (0 шт):