首页 > 解决方案 > 计算两个日期之间的特定日期计数

问题描述

我需要一个 Amazon Redshift SQL 查询来计算两个日期之间的特定天数。日期格式 - YYYY-MM-DD 例如 - 开始日期 = 2019-06-14,结束日期 = 2019-10-09,日期 - 每个月的第二天

现在,我想计算 2019 年 6 月 14 日和 2019 年 10 月 9 日之间的第 2 天下降次数

因此,上述示例的实际结果应该是 4。因为 2nd-day 的 4 次将落在 2019-06-14 和 2019-10-09 之间。

我尝试了redshift的DATE_DIFF函数和months_between函数。但未能建立逻辑。由于无法理解数学或方程式应该是什么。

标签: mysqlamazon-redshift

解决方案


对我来说,好像您想从日历表中进行选择。这样你就可以解决你的问题。您会注意到该查询看起来有点 hacky,因为 Redshift 不支持任何生成序列的函数,这让您必须自己创建序列表(请参阅seq_10seq_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'

推荐阅读