首页 > 解决方案 > 如何从 Redshift 中的日期查找周数、期间和年份?(周从周三开始,到周二结束)

问题描述

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

只需要找到Period基于weekNumber,4 周作为 1 期和以 13 结束的期(期 1-13)将再次重新开始第 1 期。(4 周 = 1 期)(无需考虑月份)。

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

计算逻辑:

例子:

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 年)。

标签: sqlamazon-web-servicesamazon-redshift

解决方案


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

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

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


推荐阅读