![](/img/trans.png)
[英]SQL Query to return records grouped by Week, Month, and Year. Weeks with no records should return 0
[英]Access query (SQL) to return records sorted (grouped by) WEEKS
問候語SQL專家,
我不知道您能否幫助我,但我會盡力的。 我有一些按年份分組的大型數據庫(每年在不同的數據庫中)。 我希望能夠比較從一年到下一年的特定一周的值。 例如,“告訴我2008年第17周與2002年第17周”。
我有以下理想的星期定義:
有任何想法嗎?
提前致謝。
最好避免創建表,因為那樣一來,您必須更新並維護它才能使查詢正常工作。
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.