当日期为Y/m/j H:i:s格式时,按日期(Y/m/j)查询和分组


Querying and grouping by date (Y/m/j) when date is in a Y/m/j H:i:s format

我有一个名为tablex的表,具有以下属性:

  1. 时间戳
  2. eventid

时间戳的格式为Y/m/j H:i:s例如,2015/02/20 00:19:16

每天有很多活动。

我正在生成图表,我需要制定SQL查询,以获取过去30天的事件的日期与计数。

SELECT COUNT(eventid)
FROM `tablex`
WHERE timestamp //this is the part where I'm stuck.
GROUP BY DAY(timestamp) 

还是建议只创建日期为Y/m/j的另一个属性?或者可以通过SQL查询完成?

如果timestamp是一个日期/时间列——它应该是。您不应该将日期/时间存储为字符串。然后你可以做:

SELECT DATE(timestamp), COUNT(eventid)
FROM `tablex`
WHERE timestamp >= date_sub(CURRENT_DATE, interval 30 day)
GROUP BY DATE(timestamp) 

请注意,此查询包括select中的日期。

如果时间戳存储为字符串,那么它的格式是合理的。我倾向于使用子查询来翻译它,并只使用它。

SELECT thedate, COUNT(eventid)
FROM (select x.*, date(replace(left(timestamp, '/', '-'), 10) as thedate
      from `tablex` x
     ) x
WHERE thedate >= date_sub(CURRENT_DATE, interval 30 day)
GROUP BY thedate;

请注意,您也可以使用str_to_date()将字符串转换为日期。我只是发现在这种情况下使用date()replace()更容易。