簡體   English   中英

按星期幾的SQL分組結果

[英]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只是給您該分組中的行總和。

SQLFiddle在這里

看起來您正在朝正確的方向前進,我認為您只需要在將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.

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