我有一个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中循环?最佳答案>您可以在MysqL中使用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,INTERVAL(6 - WEEKDAY(`date`)) DAY) AS week_end_date,week_end_date
总结 以上是内存溢出为你收集整理的php – 在mysql查询中SUM多个日期范围全部内容,希望文章能够帮你解决php – 在mysql查询中SUM多个日期范围所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)