我有一个名为tablex的表,其中包含以下属性:
时间戳格式为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查询来完成吗?
答案 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()
更容易。