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