我有一个mysql表'products',有三列:
Date | Product | Qty
我的目标是把每周每种产品的数量加起来。
得到两个给定日期之间的总和很容易:
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');
}
是否有mysql查询可以按日期分组和求和?或者我最好用php循环一下?
3条答案
按热度按时间bis0qfac1#
你可以用
Year()
以及Week()
函数,获取给定日期的年和周数。Week()
函数将返回从0到53的周数。所以,你需要使用Year()
函数,如果您有跨多年的数据。但是,你会更感兴趣的知道开始日期和结束日期为有关的一周。在这里我们可以使用一个非常有趣的函数
DayOfWeek()
. 它返回给定日期的工作日索引(1=星期日,2=星期一,…,7=星期六)我们可以用
Date_Add()
函数使用工作日索引值和实际日期值,确定给定日期的开始星期日期和结束星期日期。尝试以下方法(如果一周从周日开始):
如果星期一开始,另一个方便的功能是
WeekDay()
. 它返回日期的工作日索引(0=周一,1=周二,…6=周日)。尝试以下方法(如果本周从周一开始):
hgtggwj02#
你可以通过一个小组来实现
ac1kyiln3#
按这样做分组