[英]SQL grouping results by first date of the week
當前在sql server 2008上寫一個sql查詢,並有一個查詢來計算一周中的銷售額,當前我的代碼是按周號分組的,但是我想返回一周中的第一個日期。
目前正在返回
week number count
1 5
2 3
3 8
我正在努力做到的是
Week Number Date Count
1 1/01/2015 5
2 7/01/2015 3
3 14/01/2015 8
目前我擁有的代碼是
SELECT DATEPART(WK,CAST(a.sale_date AS DATE)), count(a.sale)
from sales a
where a.sale_date >= Dateadd(DAY, Datediff(Day, 0, DATEADD(WEEK, -52, current_timestamp)), 0)
group by DATEPART(WK,CAST(a.sale_date AS DATE))
每當我嘗試添加sale_date列時,它都會打印出類似於以下內容的內容
Week Date count
1 1/01/2015 2
1 2/01/2015 1
1 5/01/2015 2
2 7/01/2015 1
2 7/01/2015 2
等等
在此之前,有人問過類似的問題。 總而言之,您需要從日期中獲取星期幾,然后減去幾天,以獲取星期幾,如下所示:
SELECT DATEPART(WK,CAST(a.sale_date AS DATE)),
max(DATEADD(dd, -(DATEPART(dw, a.sale_date) - 1), a.sale_date)) as WeekStart, sum(1) as Count
from testdata a
where a.sale_date >= Dateadd(DAY, Datediff(Day, 0, DATEADD(WEEK, -52, current_timestamp)), 0)
group by DATEPART(WK,CAST(a.sale_date AS DATE));
編輯:請注意您是如何使用count而不是sum,這是您的主要問題,因為count對所有不同的值進行計數,而sum只是給您該分組中的行總和。
看起來您正在朝正確的方向前進,我認為您只需要在將sale_date
列添加到查詢中並執行以下操作后再走一點:
SELECT t.WEEK_NUMBER
,MIN(t.Sale_date) OVER (
PARTITION BY t.WEEK_NUMBER ORDER BY t.WEEK_NUMBER
) as Week_StartDate
,SUM(t.Amount_of_Sales_Count) Amount_of_Sales_Total_Count
FROM (
SELECT DATEPART(week, CAST(a.sale_date AS DATE)) Week_Number
,sale_date
,count(a.sale) Amount_of_Sales_Count
FROM sales a
WHERE a.sale_date >=
Dateadd(DAY, Datediff(Day, 0, DATEADD(WEEK, - 52, current_timestamp)), 0)
GROUP BY DATEPART(WK, CAST(a.sale_date AS DATE))
,sale_date
) t
GROUP BY t.WEEK_NUMBER
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.