#sql #snowflake-cloud-data-platform
Вопрос:
У меня есть таблица под названием «EMAIL_AUDIT» . В этой таблице у меня есть столбец email_sent_date.
Эта колонка содержит нижеприведенные сведения… Я хочу повторно просмотреть данные, которые не находятся в снежинке с интервалом в 5 дней.
03-05-2021, 08-05-2021, 13-05-2021, 18-05-2021, 23-05-2021, 28-05-2021, 01-06-2021, 06-06-2021, 04-07-2021, 09-07-2021, 14-07-2021, 19-07-2021, 24-07-2021, 29-07-2021, 01-08-2021, 06-08-2021 мои данные.
мне нужны выходные данные, такие как 01-06-2021 и 01-08-2021. Пожалуйста, помогите мне.
Комментарии:
1. Содержит ли одна строка эти даты, разделенные запятыми?
2. Нет, каждая дата в каждой строке.
3.
I want to retrive the data that is not in 5 days interval in snowflake.
иi want output like 01-06-2021 and 01-08-2021.
=gt; Разница между 28-05 и 01-06 составляет 4 дня, а 29-07 и 01-08-3 дня, поэтому предлагаемый результат не соответствует ожидаемому правилу.
Ответ №1:
Использование КВАЛИФИКАЦИИ в сочетании с ОПЕРЕЖЕНИЕМ/ОТСТАВАНИЕМ:
SELECT * FROM EMAIL_AUDIT QUALIFY EMAIL_SENT_DATE lt; LAG(EMAIL_SENT_DATE,1, EMAIL_SENT_DATE) OVER(ORDER BY EMAIL_SENT_DATE) INTERVAL '5 DAYS' AND EMAIL_SENT_DATE gt; LEAD(EMAIL_SENT_DATE,1, EMAIL_SENT_DATE) OVER(ORDER BY EMAIL_SENT_DATE) - INTERVAL '5 DAYS';
Ответ №2:
Согласно вашему описанию, результат должен быть 01-06-2021 и 04-07-2021, верно?
SELECT email_sent_date FROM VALUES ('03-05-2021'), ('08-05-2021'), ('13-05-2021'), ('18-05-2021'), ('23-05-2021'), ('01-06-2021'), ('06-06-2021'), ('04-07-2021'), ('09-07-2021'), ('14-07-2021'), ('19-07-2021'), ('24-07-2021'), ('29-07-2021'), ('01-08-2021'), ('06-08-2021') tmp(email_sent_date) QUALIFY LAG(TO_DATE( email_sent_date, 'DD-MM-YYYY')) OVER (ORDER BY TO_DATE( email_sent_date, 'DD-MM-YYYY')) lt; TO_DATE( email_sent_date, 'DD-MM-YYYY') - INTERVAL '5 DAYS'; ----------------- | EMAIL_SENT_DATE | ----------------- | 01-06-2021 | | 04-07-2021 | -----------------