问候SQL大师,
我不知道你是否可以帮助我,但我会尝试。我有几个按年份分组的大型数据库(每年在不同的数据库中)。我希望能够比较从一年到下一年的特定周的值。例如,“告诉我2008年第17周与2002年第17周。”
我有以下几周的定义,理想情况下我会使用:
有什么想法吗?
提前致谢。
答案 0 :(得分:5)
最好避免创建表,因为这样您必须更新并维护它才能使查询正常工作。
DatePart('ww',[myDate])
会为您提供周数。你可能会遇到一些问题虽然决定哪一周属于哪一年 - 例如,如果2003年1月1日是星期三那么这周是属于2002年的第52周还是2003年的第1周?您的会计部门将有一周中的某一天即您周末(通常是周六)。我通常只选择有最多日子的年份。 DatePart将始终将第一周计为1,并且在上周的示例中将其计为53.您可能无关紧要。您可以为每年创建查询
SELECT DatePart('ww',[myDate]) as WeekNumber,myYearTable.* as WeekNumber
FROM myYearTable
然后加入查询以获取您的数据。如果一张桌有52周,一张有53张(大多数会显示为53张),你会在年底失去几天。或者你可以在你的周末做这件事 - 这总是给你周六,这将推迟到下一年的一周。
(7-Weekday([myDate]))+[myDate]
然后
DatePart('ww',(7-Weekday([myDate]))+[myDate])
希望有所帮助
答案 1 :(得分:2)
获取周数
'to get the week number in the year
select datepart( week, datefield)
'to get the week number in the month
select (datepart(dd,datefield) -1 ) / 7 + 1
你不需要考虑闰年等事情的复杂化。只需将星期一与太阳比较
答案 2 :(得分:1)
你有一个特定的定义,即一周开始的时间与db使用的标准不同,我认为周表可以解决你的问题。每年创建一个表,用于定义每周包含的日期和周数。然后,通过加入该表以及相关的其他表,您可以只询问第17周的数据。
Table structure
Date Week
20090102 1
20090103 1
等
答案 3 :(得分:0)
我需要创建一个显示BOTH年和周数的查询,如2014-52。当您使用Datepart()公式将第53周转换为上一年的第52周时,年份显示正确,但是显示之前第1周的那一周的错误年份,现在应该是第52周。它显示该周为2015-52而不是2014-52。
此外,如果您仅使用周数,它会对数据进行排序错误,例如:
2014-1,2014-11,2014-2
为了解决这个问题,我创建了以下查询以插入0,并检查第1周中应该仍然属于第52周的天数。
ActualWeek: IIf(DatePart("ww",[SomeDate],1,3)=52 And DatePart("ww",[SomeDate])=1, DatePart("yyyy",[SomeDate],1,3)-1,DatePart("yyyy",[SomeDate],1,3)) & "-" & IIf(DatePart("ww",[SomeDate],1,3)<10,"0" & DatePart("ww",[SomeDate],1,3),DatePart("ww",[SomeDate],1,3))