#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;