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

时间:2015-02-20 00:46:03

标签: php mysql sql date group-by

我有一个名为tablex的表,其中包含以下属性:

  1. 时间戳
  2. 事件ID
  3. 时间戳格式为Y / m / j H:i:s 例如。 2015/02/20 00:19:16

    每天都有很多活动。

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

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

    或者建议仅使用日期Y / m / j创建另一个属性?或者可以通过SQL查询来完成吗?

1 个答案:

答案 0 :(得分:1)

如果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()更容易。