I
IT'S DATA
@it_s_data172 подп.
282просмотров
11 апреля 2024 г.
questionScore: 310
Как и зачем генерировать временной ряд в SQL? #sql Сразу простой пример для понимания о чем речь: SELECT report_date FROM generate_series( '2024-01-01', CURRENT_DATE-1, INTERVAL '1 day' ) AS report_date Данный запрос в postgresql вернёт таблицу со списком дат с начала года до вчерашнего дня: +-------------+ | report_date | +-------------+ | 2024-01-01 | | 2024-01-02 | | 2024-01-03 | | ... | +-------------+ Два основных случая когда это может понадобиться 1️⃣ Заполнение пропусков. Вы делаете выгрузку/датасет метрики в динамике и вам нужно видеть промежутки времени когда метрика была равна нулю. К примеру, вам нужны данные о продажах подневно, в какой-то день продаж не было вообще, и вам нужно показать этот день в выгрузке, а не оставлять в виде пропуска. 2️⃣ Вам также нужна метрика в динамике, и метрика означает наличие чего-либо на отчетный день. Например, вы хотите посчитать сколько на начало месяца было активных подписок в вашем онлайн-кинотеатре. Меняем в запросе интервал с day на month и готово, у нас есть список месяцев для дальнейшего джойна подписок. К слову, эти кейсы даже попадаются на собеседованиях. Еще один пункт - для тех, кто работает с clickhouse. Настолько же удобной функции в clickhouse нет, а некоторые статьи из топа выдачи предлагают использовать довольно сложные для новичков конструкции. Самое простое и понятное решение на мой взгляд следующее: -- Все дни января SELECT toDate('2024-01-01') + number AS report_date FROM numbers(31) -- Для получения списка дат по вчера подставляем в numbers() сколько дней прошло с начала года SELECT toDate('2024-01-01') + number AS report_date FROM numbers(dateDiff('d', toDate('2024-01-01'), today())) numbers() генерирует список чисел указанной длины, начиная с нуля, таким образом мы и получаем итоговый список: в первой строке к нашей исходной дате прибавляется 0, затем 1 - получается следующая дата и т.д. Ставь реакцию, если полезно ☺️
282
просмотров
2010
символов
Нет
эмодзи
Нет
медиа

Другие посты @it_s_data

Все посты канала →
Как и зачем генерировать временной ряд в SQL? #sql Сразу про — @it_s_data | PostSniper