我试图将每周的时间戳与每季度的时间间隔分开,因此每季度应该在1到13周之间,因此我使用了函数week()
,但整年需要1-52周,所以我做到了按下面的季度函数除以
select Week (EVENTTIMESTAMP) / QUARTER (EVENTTIMESTAMP) from KAP
这里的结果并不准确;例如它显示:
time stamp 2014-07-06 12:13:03.018
week number 9
这是不正确的,因为7月是第3季的第一个月,它是在6天内所以它应该是从Q3而不是9的1周。
任何出错的建议?
答案 0 :(得分:1)
您希望WEEK modulo 13
之类的内容可以在一个季度内获得周数。你将不得不修补模数13产生0..12'通过在适当的点加上或减去一个。
一些最小的Google搜索使用' ibm db2 sql modulo'产生DB2 MOD函数:
MOD函数将第一个参数除以第二个参数并返回余数。
因此MOD(WEEK(...), 13)
,除了您可能需要MOD(WEEK(...)-1, 13) + 1
之外,已经暗示过。
您可能需要关注WEEK()功能在年末的作用:
WEEK函数返回1到54之间的整数,表示一年中的一周。本周从星期日开始,1月1日始终在第一周。
我很好奇他们如何能够提出第54周。我想它需要1月1日成为闰年的星期六(因此1月2日是第2周的开始),如2000年和2028年注意第53周和(偶尔)第54周将显示为Q5的第1周和第2周,除非你做了什么。此外,2000年2月25日星期六将是Q1的结束,2000-03-26星期日将是WEEK()
函数强加的政权和简单MOD(WEEK(...), 13)
计算的Q2的开始。您可能需要对其进行调整以满足您的实际需求。
还有WEEK_ISO()功能:
WEEK_ISO函数返回1到53范围内的整数,表示一年中的星期。本周从星期一开始,包括七天。第1周是包含星期四的一年中的第一周,相当于包含1月4日的第一周。
请注意,根据ISO计划,1月3日可以是上一年的第52周或第53周,而12月29日可以是第二年的第1周。奇怪的是,似乎没有一个YEAR_ISO()函数可以解决这些歧义。
答案 1 :(得分:0)
在数据仓库中,正确的解决方案是创建一个时间维度,其中包含几天/几周/几个月/四分之一/年的静态映射。这提供了根据您的业务的会计日历定义这些内容的能力(如果它在日历年没有跟踪)。
有关详细信息,请参阅:http://www.kimballgroup.com/1997/07/10/its-time-for-time/。