【问题标题】:dates from the DATEDIFF()来自 DATEDIFF() 的日期
【发布时间】:2022-10-17 22:31:56
【问题描述】:

我在雪花中使用查询:

select DATEDIFF(day,start_date ,end_date) as days
       ,start_date
       ,end_date 
from table1

它没有给我。天数为:

days start_date end_date
14 2022-09-03 2022-09-17
28 2022-08-19 2022-09-16

但我需要找到日期,而不仅仅是日期。天数,即我想查看所有 14 个日期,而不仅仅是没有。天。

谁能帮忙。

【问题讨论】:

  • “日子的日期”是什么意思?您希望看到什么日期而不是数字 14?我问是因为当您从另一个日期中减去一个日期时,您会得到一个间隔,而不是另一个日期;所以这个问题令人困惑。
  • 我想查看所有 14 个日期,而不仅仅是没有。天数
  • 您所说的开始日期和结束日期之间的间隔,我想要那些日期
  • “所有 14 个日期”。这很有意义!感谢您的澄清。

标签: sql snowflake-cloud-data-platform


【解决方案1】:

您可以生成一个派生表,其中包含该表所需的整个日期范围内的所有日期,然后使用它来重新加入您的表:

WITH CTE_MY_DATE AS (
    SELECT DATEADD(DAY, SEQ4(), '2000-01-01') AS MY_DATE
    FROM TABLE(GENERATOR(ROWCOUNT=>10000))  
    WHERE MY_DATE BETWEEN 
        (SELECT MIN(start_date) FROM table1)
        AND 
        (SELECT MAX(end_date) FROM table1)
)
SELECT nct.calendar_date_column
   start_date, end_date
FROM new_calendar_table nct
   INNER JOIN table1 
      ON nct.calendar_date_column BETWEEN table1.start_date and table1.end_date

【讨论】:

    【解决方案2】:

    可以通过将每个天差的行数相乘来生成日期:

    SELECT table1.start_date
          ,table1.end_date
          ,table1.start_date + ROW_NUMBER() OVER(PARTITION BY table1.start_date,
                                                              table1.end_date 
                                                 ORDER BY NULL)-1 AS generated_date
    FROM table1
    , TABLE(SPLIT_TO_TABLE(SPACE(DATEDIFF('day', table1.start_date, table1.end_date))
            , ' ')) AS r;
    

    对于样本数据:

    CREATE OR REPLACE TABLE table1
    AS
    SELECT '2022-09-03'::DATE AS start_date, '2022-09-17'::DATE AS end_date UNION ALL
    SELECT '2022-08-19'::DATE, '2022-09-16'::DATE;
    

    输出(部分):

    【讨论】:

      猜你喜欢
      • 2020-04-21
      • 2021-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      • 1970-01-01
      • 2021-08-01
      • 1970-01-01
      相关资源
      最近更新 更多