簡體   English   中英

訪問查詢(SQL)以返回按WEEKS排序(分組)的記錄

[英]Access query (SQL) to return records sorted (grouped by) WEEKS

問候語SQL專家,

我不知道您能否幫助我,但我會盡力的。 我有一些按年份分組的大型數據庫(每年在不同的數據庫中)。 我希望能夠比較從一年到下一年的特定一周的值。 例如,“告訴我2008年第17周與2002年第17周”。

我有以下理想的星期定義:

  1. 每年只有52周,每周只有7天(僅需364天),
  2. 第一周的第一天從1月2日開始-這意味着我們不使用1月1日數據,並且
  3. 在leap年,第一周的第一天ALSO從1月2日開始,我們跳過2月29日。

有任何想法嗎?

提前致謝。

最好避免創建表,因為那樣一來,您必須更新並維護它才能使查詢正常工作。

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]) 

希望能有所幫助

獲取星期數

 '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

您不需要考慮leap年等問題就使事情變得復雜。只需將周一至周比較幾周

因為您對星期幾的開始有特定的定義,與數據庫使用的標准不同,所以我認為星期幾是解決您的問題的方法。 為每年創建一個表,該表定義每個星期中包含的日期和星期數。 然后,通過聯接到該表以及其他相關表,您可以僅索取第17周的數據。

Table structure
Date      Week
20090102   1
20090103   1

等等

我需要創建一個查詢,以顯示年份和周號,例如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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM