首页 文章

MySQL查询每周汇总值

提问于
浏览
2

我的数据库中有一个名为 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 *
**************************

我希望得到每周 Value 的总和: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命令后日期列中的日期将是每周的开始日期 .

2 回答

  • 3

    我能够使用以下方法获得我想要的结果:

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

    它会显示如下:

    Sample result using the query above

    另一种方式是:

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

    它会显示如下:

    Sample result using the query above

    我非常感谢Arun 's answer, however, to make sure same week numbers from different years don' t一起总结,使用 YEARWEEK . 请注意,在我的查询中,本周从星期日开始 .

  • 1

    您可以将 WEEK() 函数用于GROUP BY WEEK .

    Build 这样的东西:

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

    也可以做这样的事情来显示日期 CONCAT(date, '-', date + INTERVAL 6 DAY)

    请查看here以获取更多信息 .

相关问题