当我以一秒的间隔从数据库中获取数据时,仅获得可用的 DateTime
间隔输出计数,并且输出中缺少一些 DateTime
间隔。
我用计数 0 填充所有缺失的 DateTime
间隔。
示例:
如果开始日期:2019-10-15 02:36:23
则
结束日期:2019-10-15 03:36:22
以一秒的间隔获取一小时的数据,如果该时间不可用,则获取 0 计数。
mysql> select start_date,count(id) as count from live_login where start_date >= '2019-10-15 02:36:23' GROUP BY UNIX_TIMESTAMP(start_date) DIV 1;
+---------------------+-------+
| start_date | count |
+---------------------+-------+
| 2019-10-15 02:36:23 | 1 |
| 2019-10-15 02:36:24 | 1 |
| 2019-10-15 02:36:26 | 1 |
| 2019-10-15 02:36:55 | 1 |
| 2019-10-15 02:36:57 | 1 |
| 2019-10-15 02:37:08 | 1 |
输出需要这样:
| start_date | count |
+---------------------+-------+
| 2019-10-15 02:36:23 | 1 |
| 2019-10-15 02:36:24 | 1 |
| 2019-10-15 02:36:25 | 0 |
| 2019-10-15 02:36:26 | 1 |
| 2019-10-15 02:36:27 | 0 |
| 2019-10-15 02:36:28 | 0 |
| 2019-10-15 02:36:29 | 0 |
| 2019-10-15 02:36:30 | 0 |
| 2019-10-15 02:36:31 | 0 |
| 2019-10-15 02:36:32 | 0 |
| 2019-10-15 02:36:33 | 0 |
| 2019-10-15 02:36:34 | 0 |
| 2019-10-15 02:36:35 | 0 |
最佳答案
您可以创建一个虚拟表,其中包含适当范围内的所有秒数,然后将它们加入到摘要中。
尝试像这样修改查询:
SELECT COUNT(id) AS count,
listofseconds.login_date
FROM (
SELECT mintime + INTERVAL seq.seq SECOND AS login_date
FROM (
SELECT '2019-10-15 02:36:23' AS mintime,
(SELECT DATE_ADD('2019-10-15 02:36:23', INTERVAL '59:59' MINUTE_SECOND)) AS maxtime
FROM live_login
) AS minmax
JOIN seq_0_to_999999 AS seq ON seq.seq < TIMESTAMPDIFF(SECOND,mintime,maxtime)
) AS listofseconds
LEFT JOIN live_login ON listofseconds.login_date = SECOND(live_login.start_date)
GROUP BY SECOND(listofseconds.login_date)
ORDER BY SECOND(listofseconds.login_date)
此查询的 end_date 为 2019-10-15 03:36:22
:
SELECT DATE_ADD('2019-10-15 02:36:23', INTERVAL '59:59' MINUTE_SECOND)
此查询将获取范围内的秒:
SELECT mintime + INTERVAL seq.seq SECOND AS login_date
FROM (
SELECT '2019-10-15 02:36:23' AS mintime,
(SELECT DATE_ADD('2019-10-15 02:36:23', INTERVAL '59:59' MINUTE_SECOND)) AS maxtime
FROM live_login
) AS minmax
JOIN seq_0_to_999999 AS seq ON seq.seq < TIMESTAMPDIFF(SECOND,mintime,maxtime)
关于php - 查询输出中缺少 DATETIME 值,然后自动填充缺少的值并获得正确的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58407753/