【发布时间】:2023-03-20 08:00:01
【问题描述】:
我有这些生成器视图:
CREATE OR REPLACE VIEW generator_16
AS SELECT 0 n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL
SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL
SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL
SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL
SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL
SELECT 15;
CREATE OR REPLACE VIEW generator_256
AS SELECT ( ( hi.n << 4 ) | lo.n ) AS n
FROM generator_16 lo, generator_16 hi;
然后我有这个生成的简单代码
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:00') - INTERVAL n minute cardinal_interval
FROM generator_256
WHERE DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:00') - INTERVAL n minute >= NOW() - INTERVAL 1 hour
如果当前时间是2015-04-13 13:17:32
这会生成
2015-04-13 13:17:00
2015-04-13 13:16:00
2015-04-13 13:15:00
2015-04-13 13:14:00
2015-04-13 13:13:00
2015-04-13 13:12:00
2015-04-13 13:11:00
2015-04-13 13:10:00
2015-04-13 13:09:00
...
2015-04-13 12:18:00
2015-04-13 12:17:00
到目前为止一切顺利。我只是想知道如何让它使用相同的生成器表,但给我四舍五入的间隔 5 分钟所以结果是
如果当前时间是2015-04-13 13:17:32:
2015-04-13 13:15:00
2015-04-13 13:10:00
2015-04-13 13:05:00
2015-04-13 13:00:00
2015-04-13 12:55:00
...
2015-04-13 12:15:00
我已经解决这个问题好几个小时了。我使用一些可怕的 mysql spaghetti 代码接近了预期的结果,只是想一定有一种更干净的方法,而我完全错过了。
我对“INTERVAL n”如何工作的理解似乎是这里的问题。请帮忙
【问题讨论】:
-
你会使用脚本语言吗?
-
我可以使用存储过程和其他 MySQL 技巧,但解决方案需要完全来自 MySQL