mysql中如何查询一周(周一至周日)和一个月(自然月)销售数据(字段-sale)的总和,时间字段是date

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql中如何查询一周(周一至周日)和一个月(自然月)销售数据(字段-sale)的总和,时间字段是date相关的知识,希望对你有一定的参考价值。


SELECT
MONTH( date )
SUM ( sale )
FROM

GROUP BY
MONTH( date );


SELECT
WEEK ( date )
SUM ( sale )
FROM

GROUP BY
WEEK( date );

注:
MONTH 函数, 取得 参数日期的 月
WEEK 函数, 取得 参数日期的 周
( 按照老外的 算法。 一周的开始, 是从周日开始的 )追问

那如果从周一算起,周一至周日应该怎么改呀,多谢了

参考技术A 需要的是不是这样的情况 参考技术B 这个帮不了你,祝你好运

获取上周一 - 周日的日期:有更好的方法吗?

【中文标题】获取上周一 - 周日的日期:有更好的方法吗?【英文标题】:Get Last Monday - Sunday's dates: Is there a better way? 【发布时间】:2011-01-25 15:16:16 【问题描述】:

我正在为 mySQL 准备一个查询以获取前一周的记录,但我必须将几周视为星期一 - 星期日。我最初是这样做的:

WHERE YEARWEEK(contactDate) = YEARWEEK(DATE_SUB(CURDATE(),INTERVAL 7 DAY))

发现 mySQL 将星期视为星期日 - 星期一。因此,我正在解析获取 php 中的开始和结束日期,如下所示:

$i = 0; 
while(date('D',mktime(0,0,0,date('m'), date('d')-$i, date('y'))) != "Mon")  
  $i++; 


$start_date = date('Y-n-j', mktime(0,0,0,date('m'), date('d')-($i+7), date('y')));
$end_date  = date('Y-n-j', mktime(0,0,0,date('m'), date('d')-($i+1), date('y')));

这行得通 - 它获取当前一周的星期一日期(向后走直到星期一),然后根据该日期计算前一周的日期。

我的问题是:有没有更好的方法来做到这一点?只是看起来很草率,我希望有人可以给我一个更干净的方法来做这件事 - 或者可能不是因为我需要周一到周日的周。

编辑

显然有:

$start = date('Y-m-d',strtotime('last monday -7 days'));
$end   = date('Y-m-d',strtotime('last monday -1 days'));

这大约是可读性的一百万倍。谢谢。

【问题讨论】:

【参考方案1】:

您可以使用strtotime 处理此类日期问题

echo strtotime("last Monday");

【讨论】:

优雅!我忘了这件事。 echo date('Y-m-d',strtotime('last monday -7 days')); 令人难以置信。 令人难以置信的是对的!惊人的! strftime('%Y-%m-%d', strtotime("上周星期一")) 或者试试: strftime('%Y-%m-%d', strtotime("上个月的第一天")); @marvin 你是等到今天才测试它吗? ;-) 它应该是“上周一”,上周一将返回本周周一。【参考方案2】:

(对 marvin 和 Stomped 的补充)你也可以这样使用它

echo date('Y-m-d',strtotime('-1 Monday')); //last Monday
echo date('Y-m-d',strtotime('-2 Monday')); //two Mondays ago
echo date('Y-m-d',strtotime('+1 Monday')); //next Monday

【讨论】:

【参考方案3】:
strtotime("previous week Monday")

前一周的星期一。

【讨论】:

正是我一直在寻找的...#awesome 这是更正确的答案,而不是“-1 Monday”和“Last Monday”,它们返回本周的星期一【参考方案4】:

Marvin 的回答非常优雅,尽管如果您真的想追求性能,您可以通过一点算术来做到这一点。您可以推导出一个公式/方法来将任意日期转换为“从某个起点开始的天数”(可能是 01.01.0000),然后其余的操作就很容易了。从这样的数字中获取星期几就像减去并得到除法的余数一样简单。

实际上,PHP 在其 PEAR 库中有一个 Date 类,正是这样做的。

【讨论】:

【参考方案5】:

我必须在这里向所有读者指出,马文的回答有一个大问题

这是关键 "last Monday" 函数会返回 "latest" Monday 的日期。这样解释,如果今天是星期一,则返回 "LAST WEEK" 星期一的日期,但如果今天不是星期一,则返回“本周”星期一 问题是要求周一返回“上周”。因此,如果今天不是星期一,结果将不正确。 我已经解决了这个问题并包含在我的日期时间助手中 在您“包含”课程后,它将只有一行

$lastWeekMonday = Model_DTHpr::getLastWeekMonday();

检查这里

https://github.com/normandqq/Date-Time-Helper

【讨论】:

我也发现了。但是,就我而言,即使我在周二运行它,我也想确保我在上周一确实得到了它。我发现你可以这样做:strftime('%Y-%m-%d', strtotime("last week Monday"))

以上是关于mysql中如何查询一周(周一至周日)和一个月(自然月)销售数据(字段-sale)的总和,时间字段是date的主要内容,如果未能解决你的问题,请参考以下文章

使用当前日期生成一周的所有日期,还显示周一的周开始日期和周日的周末

获取上周一 - 周日的日期:有更好的方法吗?

如何获取该周(周一至周日)之间的日期的周日期范围(周一至周日)

JS 如何通过年和周来算出所在周的周一与周日的日期

java获取某个时间的上周一和周日

知道用户是否希望在周日或周一开始一周