我的数据库中有一个名为tblSales的表。它有两列,DateSalesDate是主键,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);

它会显示如下内容:
不过,我非常感谢阿伦的回答,为了确保不同年份的同一周数不在一起,请使用YEARWEEK。请注意,在我的查询中,本周从星期日开始。

关于c# - MySQL每周求和值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26081459/

10-11 13:12