【发布时间】:2020-10-23 05:36:29
【问题描述】:
我有几百万条记录的表,其中包含指示全天随机时间 (datetime) 存在多少“事物”(int)。 (一天可能有 100 条或 1000 条记录。)
我需要报告大约 [00:00, 06:00, 12:00, 18:00] 每天存在多少“事物”...这意味着可能有也可能没有那些时间的记录,所以如果我不需要最近的记录(之前或之后)。
我尝试了一些方法,但运行时不适用于生产。必须有一种我没有想到的更有效的方法。这是我的尝试之一,但我也尝试使用UNION 查询,以及从 PHP 运行 4 个单独的查询。 (解决方案可以是 MySQL、PHP 或 JS/JQuery 中的任何一种)。
SELECT dt, SUM(things) thgs
FROM myTable
WHERE dt IN (SELECT MIN(dt) FROM myTable GROUP BY DATE(dt))
OR dt IN (SELECT DATE_SUB(MIN(DATE_ADD(dt, INTERVAL 6 HOUR)), INTERVAL 6 HOUR) FROM myTable
GROUP BY DATE_SUB(DATE(DATE_ADD(dt, INTERVAL 6 HOUR)), INTERVAL 6 HOUR))
OR dt IN (SELECT DATE_SUB(MIN(DATE_ADD(dt, INTERVAL 12 HOUR)), INTERVAL 12 HOUR) FROM myTable
GROUP BY DATE_SUB(DATE(DATE_ADD(dt, INTERVAL 12 HOUR)), INTERVAL 12 HOUR))
OR dt IN (SELECT DATE_SUB(MIN(DATE_ADD(dt, INTERVAL 18 HOUR)), INTERVAL 18 HOUR) FROM myTable
GROUP BY DATE_SUB(DATE(DATE_ADD(dt, INTERVAL 18 HOUR)), INTERVAL 18 HOUR))
GROUP BY dt
ORDER BY dt
想法?
【问题讨论】:
标签: javascript php mysql time group-by