簡體   English   中英

MySQL每周求和值

[英]MySQL Query for Summing Values per Week

我的數據庫中有一個名為tblSales的表。 它有兩列, DateSales Date是主鍵, Sales將是給定日期的銷售額。 假設我的表包含以下值:

**************************
*    Date    *   Sales   *
**************************
* 2013-12-31 *    150.00 *
* 2014-01-01 *     50.00 *
* 2014-01-02 *    100.00 *
* 2014-01-03 *     25.00 *
* 2014-01-08 *    200.00 *
* 2014-01-10 *     50.00 *
* 2014-01-16 *     25.00 *
* 2014-01-29 *    500.00 *
**************************

我想基於以下內容獲取每周值的總和:a)一年中的每個星期b)每周從指定日期開始

對於要求A,開始日期應基於一年中第一周的開始日期。 例如,在2014年,第一周從12月30日開始,一直到1月5日。我將得到如下輸出:

**************************
*    Date    *   Sales   *
**************************
* 2013-12-30 *    325.00 * <--- Week 1 of the year 2014 (Dec. 30 - Jan. 05)
* 2014-01-06 *    250.00 * <--- Week 2 of the year 2014 (Jan. 06 - Jan. 12)
* 2014-01-13 *     25.00 * <--- Week 3 of the year 2014 (Jan. 13 - Jan. 19)
* 2014-01-20 *      0.00 * <--- Week 4 of the year 2014 (Jan. 20 - Jan. 26)
* 2014-01-27 *    500.00 * <--- Week 5 of the year 2014 (Jan. 27 - Feb. 02)
**************************

對於要求B,必須指定開始日期。 例如,我指定了日期為2014年1月2日開始。我將得到以下結果:

**************************
*    Date    *   Sales   *
**************************
* 2014-01-02 *    325.00 * <--- Week dates: Jan. 02 - Jan. 08
* 2014-01-09 *     50.00 * <--- Week dates: Jan. 09 - Jan. 15
* 2014-01-16 *     25.00 * <--- Week dates: Jan. 16 - Jan. 22
* 2014-01-23 *    500.00 * <--- Week dates: Jan. 23 - Jan. 29
**************************

SELECT命令之后的date列中的日期將是每周的開始日期。

我能夠使用以下方法獲得所需的結果:

SELECT STR_TO_DATE(CONCAT(YEARWEEK(Date, 0), ' ', 'Sunday'), '%X%V %W') AS 'Week Start', 
       STR_TO_DATE(CONCAT(YEARWEEK(Date, 0), ' ', 'Saturday'), '%X%V %W') AS 'Week End',
       SUM(Sales) AS Sales 
FROM tblSales
GROUP BY YEARWEEK(Date)
ORDER BY YEARWEEK(Date);

它會顯示如下內容:

使用上面的查詢的樣本結果

另一種方法是:

SELECT CONCAT(STR_TO_DATE(CONCAT(YEARWEEK(Date, 0), ' ', 'Sunday'), '%X%V %W'), 
              ' - ', 
              STR_TO_DATE(CONCAT(YEARWEEK(Date, 0), ' ', 'Saturday'), '%X%V %W')
             ) AS Week, 
       SUM(Sales) AS Sales 
FROM tblSales
GROUP BY YEARWEEK(Date, 0)
ORDER BY YEARWEEK(Date, 0);

它會顯示如下內容:

使用上面的查詢的樣本結果

我非常感謝Arun的回答,但是,要確保不同年份的同一周數字不加在一起,請使用YEARWEEK 請注意,在我的查詢中,一周從星期日開始。

您可以將WEEK()函數用於GROUP BY WEEK。

建立像這樣的東西:

SELECT WEEK(Date) AS WEEK DATES,
       SUM(Sales)
...
GROUP BY WEEK(Date)
....

也可以做這樣的事情來顯示日期CONCAT(date, '-', date + INTERVAL 6 DAY)

在這里查看更多信息。

暫無
暫無

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

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