[英]SUM multiple date ranges in mysql query
我有一个MySql表'Products'有三列:
Date | Product | Qty
我的目标是每周提取每种产品的数量。
在两个给定日期之间获得SUM很容易:
SELECT SUM(qty) FROM products WHERE date >= '2010-01-01' AND date < '2011-01-1'
我可以使用以下内容生成Php中的周列表:
$today = date('Y-m-d', strtotime('last week Monday'));
$future = date('Y-m-d', strtotime('+90 days'));
$period = new DatePeriod(
new DateTime($today),
new DateInterval('P7D'),
new DateTime($future)
);
foreach ($period as $key => $value) {
$dates .= $value->format('Y-m-d');
}
是否有按日期分组依据和SUM的MySql查询? 或者我会更好地在Php中循环?
您可以通过类似的组来实现
GROUP BY week(date)
GROUP BY也是如此
SELECT SUM(qty) FROM products GROUP BY WEEK(date);
Year()
和Week()
函数来获取给定日期的年份和周数。 Week()
函数将返回从0到53的周数。因此,如果您的数据跨越多年,则需要使用Year()
函数。 DayOfWeek()
。 它返回给定日期的工作日索引( 1 =星期日,2 =星期一,...,7 =星期六 ) Date_Add()
函数,以确定给定日期的开始周日期和结束周日期。 尝试以下( 如果周从星期日开始 ):
SELECT
DATE_ADD(`date`, INTERVAL(1 - DAYOFWEEK(`date`)) DAY) AS week_start_date,
DATE_ADD(`date`, INTERVAL(7 - DAYOFWEEK(`date`)) DAY) AS week_end_date,
SUM(qty)
FROM
products
GROUP BY week_start_date, week_end_date
如果周从星期一开始,另一个方便的功能是WeekDay()
。 它返回日期的工作日索引( 0 =星期一,1 =星期二,... 6 =星期日 )。
尝试以下( 如果周从星期一开始 ):
SELECT
DATE_ADD(`date`, INTERVAL(0 - WEEKDAY(`date`)) DAY) AS week_start_date,
DATE_ADD(`date`, INTERVAL(6 - WEEKDAY(`date`)) DAY) AS week_end_date,
SUM(qty)
FROM
products
GROUP BY week_start_date, week_end_date
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.