访问查询(SQL)以返回按WEEKS排序(按分组)的记录

时间:2009-04-17 21:17:05

标签: sql ms-access

问候SQL大师,

我不知道你是否可以帮助我,但我会尝试。我有几个按年份分组的大型数据库(每年在不同的数据库中)。我希望能够比较从一年到下一年的特定周的值。例如,“告诉我2008年第17周与2002年第17周。”

我有以下几周的定义,理想情况下我会使用:

  1. 每年仅52周,每周7天(仅需364天),
  2. 第一周的第一天从1月2日开始 - 这意味着我们不使用1月1日的数据,
  3. 在闰年,第一周的第一天ALSO从1月2日开始加上我们跳过2月29日。
  4. 有什么想法吗?

    提前致谢。

4 个答案:

答案 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))