使用MySQL获取周开始日期

时间:2011-10-02 11:05:00

标签: mysql datetime group-by

如果我有这样的MySQL查询,那么每周汇总单词频率:

SELECT 
  SUM(`city`), 
  SUM(`officers`), 
  SUM(`uk`), 
  SUM(`wednesday`), 
  DATE_FORMAT(`dateTime`, '%d/%m/%Y') 
FROM myTable 
WHERE dateTime BETWEEN '2011-09-28 18:00:00' AND '2011-10-29 18:59:00' 
GROUP BY WEEK(dateTime)

MySQL给出的结果取第date列的第一个值,在这种情况下是28/09/2011,恰好是星期六。

是否可以调整MySQL中的查询以显示本周开始的日期,即使没有可用数据,因此对于上述内容,2011-09-28将被替换为2011/09/26代替?也就是说,一周开始的日期,即星期一。或者在查询运行后以编程方式调整日期会更好吗?

dateTime列格式为2011/10/02 12:05:00

1 个答案:

答案 0 :(得分:0)

可以在SQL中执行它,但最好在程序代码中执行它,因为它会更高效,更容易。此外,虽然MySQL接受您的查询,但它没有多大意义 - 当您按DATE_FORMAT(dateTime, '%d/%m/%Y')分组时,您在select的字段列表中有WEEK(dateTime)。这意味着数据库引擎必须从每一行的当前组(周)中选择随机日期。即我们认为您有27.09.201128.09.201129.09.2011的记录 - 它们都属于同一周,因此在最终结果集中,只为这三个记录生成一行。现在应该为DATE_FORMAT()调用选择这三个中的哪个日期?如果查询中有ORDER BY,答案会更简单但是在字段列表中使用不在GROUP BY中的字段/表达式或者不在聚合中的字段/表达式仍然没有意义。您应该在选择列表中返回周数(而不是DATE_FORMAT调用),然后在您的代码中计算它的开始和结束日期。