SQL: ЗАПРОС, оператор IF

#sql #if-statement #lookup

Вопрос:

У меня есть следующая таблица с 3 столбцами

дата фактическая Идентификатор транспортного средства Припаркованный
2021-06-27 1234 0
2021-06-28 1234 0
2021-06-29 1234 0
2021-06-30 1234 1
2021-07-01 1234 1
2021-07-02 1234 1
2021-07-03 1234 1
2021-07-04 1234 1
2021-07-05 1234 0
2021-07-06 1234 0
2021-07-07 1234 0
2021-06-27 5555 0
2021-06-28 5555 1

В основном таблица, содержащая даты, идентификаторы транспортных средств и третий столбец, в котором указывается, был ли автомобиль в комплексе (припаркован) или нет. Мне нужно создать четвертый столбец в этой таблице под названием: Приток. Приток должен дать мне следующий результат:

Если автомобиль припаркован на дату x, но не был припаркован на дату x — 1, он должен иметь приток = 1. Если первая дата автомобиля, доступного в таблице, уже начинается с 1, приток должен быть равен 0.

Надеюсь, вы, ребята, сможете мне помочь.

С наилучшими пожеланиями,

Лаззанова

Комментарии:

1. Пожалуйста, покажите нам, что вы пробовали до сих пор. SO-это не портал для написания кода, но он предназначен для того, чтобы помочь вам научиться продвигаться как разработчик.

2. Справедливо: я попытался использовать функцию задержки select t.*, (case when coalesce(lag(Parked) over (partition by vehicle_ID order by date_actual), parked) = parked - 1 then 'true' else 'false' end) as inflow from t;

Ответ №1:

Вы, кажется, описываете:

 select t.*,
       (case when Parked = 1 and
                  lag(Parked, 1, 0) over (partition by vehicle_ID order by date_actual) = 0
             then 'true' else 'false'
        end) as inflow
from t;