Рассчитать количество падения определенного дня между двумя датами - PullRequest
0 голосов
/ 14 июня 2019

Мне нужен SQL-запрос Amazon Redshift, чтобы вычислить количество выпадений определенного дня между двумя датами. Формат даты - ГГГГ-ММ-ДД Например - Дата начала = 2019-06-14, Дата окончания = 2019-10-09, День - 2-е число каждого месяца

Теперь я хочу вычислить счет падения 2-го дня между 2019-06-14 и 2019-10-09

Таким образом, фактический результат для приведенного выше примера должен быть равен 4. Так как 4-й день 2-й день попадет между 2019-06-14 и 2019-10-09.

Я попробовал функцию DATE_DIFF и функцию month_between красного смещения. Но не удалось построить логику. Поскольку не в состоянии понять, что математика или уравнение должно быть.

1 Ответ

0 голосов
/ 15 июня 2019

для меня кажется, что вы хотите выбрать из календарной таблицы.Вот как вы можете решить свою проблему.Вы заметите, что запрос выглядит немного хакерским, потому что Redshift не поддерживает какие-либо функции для генерации последовательностей, что оставляет вас самостоятельно создавать таблицы последовательностей (см. seq_10 и seq_1000).Если у вас есть последовательность, вы можете легко создать calendar со всей необходимой информацией (например, day_of_month).

Это вопрос, отвечающий на ваш вопрос:

WITH seq_10 as (
    SELECT 1 UNION ALL
    SELECT 1 UNION ALL
    SELECT 1 UNION ALL
    SELECT 1 UNION ALL
    SELECT 1 UNION ALL
    SELECT 1 UNION ALL
    SELECT 1 UNION ALL
    SELECT 1 UNION ALL
    SELECT 1 UNION ALL
    SELECT 1
), seq_1000 as (
    select
           row_number() over () - 1 as n
    from
         seq_10 a cross join
         seq_10 b cross join
         seq_10 c
), calendar as (
    select '2018-01-01'::date + n as date,
    extract(day from date) as day_of_month,
    extract(dow from date) as day_of_week
    from seq_1000
)
select count(*) from calendar
where day_of_month = 2
and date between '2019-06-14' and '2019-10-09'
...