#sql #testing #boolean #formula
Вопрос:
У меня есть таблица с 3 столбцами: идентификатор, имя события, Метка времени. Каждая строка таблицы сообщает, въехал ли автомобиль в состав или выехал из него, с соответствующей отметкой времени.
При группировании и упорядочении этой таблицы по идентификатору и имени события в таблице не должно быть 2 последовательных строк с одним и тем же событием. Автомобиль не может дважды въезжать на территорию комплекса или дважды последовательно выезжать из него.
Мне нужна еще одна колонка, которая может проверить, верно это или нет.
CarID | EventNAme | Timestamp
927 | Enter | 2020-04-30
927 | Exit | 2020-05-28
906 | Enter | 2020-11-06
906 | Exit | 2020-11-26
609 | Enter | 2021-02-08
609 | Exit | 2021-02-10
609 | Exit | 2021-02-10
609 | Enter | 2021-02-12
900 | Enter | 2020-11-12
900 | Enter | 2020-11-18
900 | Exit | 2020-11-18
Поэтому мне нужно написать что-то на SQL таким образом, чтобы результат таблицы был таким, как показано ниже:
CarID | EventNAme | Timestamp | Test
927 | Enter | 2020-04-30 | True
927 | Exit | 2020-05-28 | True
906 | Enter | 2020-11-06 | True
906 | Exit | 2020-11-26 | True
609 | Enter | 2021-02-08 | True
609 | Exit | 2021-02-10 | True
609 | Exit | 2021-02-10 | False
609 | Enter | 2021-02-12 | True
900 | Enter | 2020-11-12 | True
900 | Enter | 2020-11-18 | False
900 | Exit | 2020-11-18 | True
С наилучшими пожеланиями,
Лаззанова
Комментарии:
1. Вы просите об
LAG()
этом .
Ответ №1:
Вы можете использовать lag()
:
select t.*,
(case when lag(eventname, 1, eventname) over (partition by car order by timestamp) = eventname
then 'true' else 'false'
end) as test
from t;
Редактировать:
Если параметр по умолчанию не поддерживается вашей базой данных, просто используйте coalesce
:
select t.*,
(case when coalesce(lag(eventname) over (partition by car order by timestamp), eventname) = eventname
then 'true' else 'false'
end) as test
from t;
Комментарии:
1. Я получаю сообщение: ОШИБКА: Параметр по умолчанию не поддерживается для задержки функции окна при использовании вашего заявления выше.
2. @Lazzanova . . . Это странно. Это стандартный SQL, и почти все базы данных поддерживают его.