【问题标题】:How to Find Week number, Period and year from Date in Redshift? (Week Starting with Wednesday and ends up with Tuesday)如何从 Redshift 中的日期查找周数、期间和年份? (周从周三开始,到周二结束)
【发布时间】:2019-11-14 12:14:56
【问题描述】:

需要像1,2,3,4 一样找到weekNumber,但一周从星期三开始,从日期列到星期二结束,在第 4 周之后,再次作为第 1 周重新开始,依此类推(无需考虑月)。

只需要根据weekNumber 找到Period,4 周为 1 期和以 13 结尾的期(期 1-13)将在第 1 期重新开始。 (4 周 = 1 期)(无需考虑月份)。

现在需要根据Period 计算businessyear。 13 个周期为一个 businessyear。 (13 个周期 = 1 年)

计算逻辑:

  • 7 天 * 4 周 = 28 天 = 1 个周期
  • 13 个周期 = 1 个工作年

例子:

  • 一年通常有365天
  • 在我的场景中,4 周 * 7 天 = 28 天
  • 28 天 *13 个周期 = 364 天
  • 剩余天数将在第 5 周和第 14 期到来。
Datekey   date        Year  semistor  Quarter  Month       DayName     DayNum  Wnumber
20090101  01-01-2009  2009  1         1        January  1   Thursday   1       0
20090102  02-01-2009  2009  1         1        January  1   Friday     2       0
20090103  03-01-2009  2009  1         1        January  1   Saturday   3       0
20090104  04-01-2009  2009  1         1        January  1   Sunday     0     
20090105  05-01-2009  2009  1         1        January  1   Monday     0     
20090106  06-01-2009  2009  1         1        January  1   Tuesday    6       0
20090107  07-01-2009  2009  1         1        January  1   Wednesday  0       0
20090108  08-01-2009  2009  1         1        January  1   Thursday   1       1
20090109  09-01-2009  2009  1         1        January  1   Friday     2       1
20090110  10-01-2009  2009  1         1        January  1   Saturday   3       1
20090111  11-01-2009  2009  1         1        January  1   Sunday     4       1
20090112  12-01-2009  2009  1         1        January  1   Monday     5       1
20090113  13-01-2009  2009  1         1        January  1   Tuesday    6       1
20090114  14-01-2009  2009  1         1        January  1   Wednesday  0       1

在我的场景中不需要考虑月份,还需要考虑闰年(2016 年、2020 年)。

【问题讨论】:

    标签: sql amazon-web-services amazon-redshift


    【解决方案1】:

    做这类事情的传统方法是在数据库中创建一个日历表。然后,您的查询可以简单地JOIN 到日历表中提取相关值。

    我发现创建calendar 表的最简单方法是使用 Excel。只需编写一些提供所需值的公式,然后复制下一个十年左右的时间。然后,将工作表另存为 CSV 并将其加载到数据库中。

    这样,您可以完全避免涉及数据库函数的复杂计算,并且您可以使用任何您想要的规则。

    【讨论】:

      猜你喜欢
      • 2010-11-19
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-14
      相关资源
      最近更新 更多