我有一个名为tablex的表,具有以下属性:
- 时间戳
- 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()
更容易。