在 MySQl 中计算一个月中某一天的事件数
Count the number of events on a day of the month in MySQl
我想计算在一个月中的任何一天(即 1 日到 31 日)发生的事件数。不是具体的月份。这样我就可以看到每个月的什么时间发生的事件最多。
我可以通过此查询获得跨越几个月的特定日期时间的事件总数
SELECT COUNT(*), DATE(created_at)
FROM loan
WHERE DATE(created_at) >= DATE('2020-08-01')
AND DATE(created_at) <= DATE('2020-12-31')
GROUP BY DATE(created_at);
例如,每月 7 号发生 10 件事情,29 号发生 50 件事情。所以我可以看到月底还有更多activity。
使用DAY()
代替DATE()
:
SELECT DAY(created_at), COUNT(*)
FROM loan
WHERE created_at >= '2020-08-01' AND
created_at < '2021-01-01'
GROUP BY DAY(created_at);
请注意,您不需要 WHERE
子句中的所有 DATE()
函数。如果索引可用于 WHERE
条件,则可能会降低性能。
考虑按 DAY()
而不是 DATE()
聚合:
SELECT COUNT(*), DAY(created_at)
FROM loan
WHERE created_at >= '2020-08-01' AND created_at < '2021-01-01'
GROUP BY DAY(created_at);
请注意,我更改了 where
子句,因此它不会对要过滤的列应用任何函数;这样效率更高,尤其是当您在 created_at
.
上有索引时
我想计算在一个月中的任何一天(即 1 日到 31 日)发生的事件数。不是具体的月份。这样我就可以看到每个月的什么时间发生的事件最多。
我可以通过此查询获得跨越几个月的特定日期时间的事件总数
SELECT COUNT(*), DATE(created_at)
FROM loan
WHERE DATE(created_at) >= DATE('2020-08-01')
AND DATE(created_at) <= DATE('2020-12-31')
GROUP BY DATE(created_at);
例如,每月 7 号发生 10 件事情,29 号发生 50 件事情。所以我可以看到月底还有更多activity。
使用DAY()
代替DATE()
:
SELECT DAY(created_at), COUNT(*)
FROM loan
WHERE created_at >= '2020-08-01' AND
created_at < '2021-01-01'
GROUP BY DAY(created_at);
请注意,您不需要 WHERE
子句中的所有 DATE()
函数。如果索引可用于 WHERE
条件,则可能会降低性能。
考虑按 DAY()
而不是 DATE()
聚合:
SELECT COUNT(*), DAY(created_at)
FROM loan
WHERE created_at >= '2020-08-01' AND created_at < '2021-01-01'
GROUP BY DAY(created_at);
请注意,我更改了 where
子句,因此它不会对要过滤的列应用任何函数;这样效率更高,尤其是当您在 created_at
.