如何在Redshift中查找从日期开始的星期数,期间和年份? (每周从星期三开始,到星期二结束)

时间:2019-07-03 18:48:39

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

需要像weekNumber那样找到1,2,3,4,但该周从日期列开始于星期三,以星期二结束,在第4周之后,该周又从第1周重新开始,依此类推(无需考虑月份)。

只需基于Period查找weekNumber,则4个周期为1个周期,并且以13结尾的周期(周期1-13)将在第1个周期重新开始。 (4周= 1个周期)(无需考虑月份)。

现在需要基于businessyear计算Period。 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

在我的情况下无需考虑月份,也需要考虑leap年(2016、2020)。

1 个答案:

答案 0 :(得分:0)

执行此类操作的传统方法是在数据库中创建日历表。然后,您的查询可以简单地JOIN进入日历表以提取相关值。

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

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