【问题标题】:How to enumerate weeks over years in SQL/SNOWFLAKE如何在 SQL/SNOWFLAKE 中枚举数年的周数
【发布时间】:2022-01-17 08:20:29
【问题描述】:

我一直在玩弄用 SQL 制作一个包含日历的数据模型。

我现在遇到的问题是枚举周数(作为稍后为可视化目的排序它们的一种方式,例如“轻松编码选择过去 4 周”)。

这在 Excel 中被证明很容易,但我想要一种从查询中构建它的方法,因为每次数据模型运行时都会重新创建日历(创建/替换表)。

到目前为止,我已经尝试过(但在年份变化后失败)是这样的(我不知道如何从我当前正在创建的字段中选择上一条记录):

CASE WHEN week_of_year <> coalesce(lag(WEEKOFYEAR("DATE"),1) over (order by "DATE"),1) 
    THEN lag(WEEKOFYEAR("DATE"),1) over (order by "DATE") +1 
    ELSE lag(WEEKOFYEAR("DATE"),1) over (order by "DATE")

所需的GROUPED输出是这样的(表示日历应该有每天的数据):

YEAR WEEK_OF_YEAR week_order
2000 49 50
2000 50 51
2000 51 52
2000 52 53
2001 1 54
2001 1 55
2001 2 56
2001 3 57

【问题讨论】:

    标签: sql snowflake-cloud-data-platform dbt


    【解决方案1】:

    如果您想要一个在数年和数周内递增的值,那么跨具有所有组合值的数据应该可以工作:

    SELECT year, 
        week_of_year, 
        row_number() over (order by year, week_of_year) as week_order
    

    【讨论】:

      【解决方案2】:

      怎么样

      row_number() over (order by YEAR, WEEK_OF_YEAR) as week_order
      

      【讨论】:

      • 如果您的答案是在示例输出中给出第三列,那么您不会像第三列那样在年末保持不变,而是从 1 重新开始。也就是说,您刚刚重新创建了 week_of_year跨度>
      • 好点,会更新
      猜你喜欢
      • 1970-01-01
      • 2021-09-03
      • 2012-02-06
      • 1970-01-01
      • 1970-01-01
      • 2015-02-12
      • 2019-10-02
      • 2012-03-11
      • 2019-03-22
      相关资源
      最近更新 更多