我的数据库中有一个名为tblSales
的表。它有两列Date
和Sales
。 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命令后日期列中的日期将是每周的开始日期。
答案 0 :(得分: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);
它会显示如下:
另一种方式是:
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
。请注意,在我的查询中,本周从星期日开始。
答案 1 :(得分:1)
您可以将WEEK()
功能用于GROUP BY WEEK。
建立这样的东西:
SELECT WEEK(Date) AS WEEK DATES,
SUM(Sales)
...
GROUP BY WEEK(Date)
....
也可以执行以下操作来显示日期CONCAT(date, '-', date + INTERVAL 6 DAY)
查看here了解更多信息。