当日期为 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 的 table,具有以下属性:
- 时间戳
- 事件编号
时间戳格式为 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
是 date/time 列 - 它应该是。您不应该将 date/times 存储为字符串。然后你可以这样做:
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()
.
更容易
我有一个名为 tablex 的 table,具有以下属性:
- 时间戳
- 事件编号
时间戳格式为 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
是 date/time 列 - 它应该是。您不应该将 date/times 存储为字符串。然后你可以这样做:
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()
.