gpt4 book ai didi

php - SUM mysql查询中的多个日期范围

转载 作者:可可西里 更新时间:2023-11-01 06:48:24 25 4
gpt4 key购买 nike

我有一个包含三列的 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');
}

是否有 MySql 查询可用于按日期分组和求和?或者我最好在 Php 中循环?

最佳答案

  • 您可以使用 Year()Week() MySQL 中的函数,用于获取给定日期的年和周数。 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

关于php - SUM mysql查询中的多个日期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52775337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com