【问题标题】:how to generate 5 minute intervals in MySQL using a generator table如何使用生成器表在 MySQL 中生成 5 分钟间隔
【发布时间】: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

标签: mysql intervals


【解决方案1】:

好吧,我找到了一种方法。如果您能看到更清洁的方式,请告诉我。虽然我认为这还不错,但我希望没有额外的交叉连接也能做到。

SELECT
    DATE_ADD(@start_date, INTERVAL @i:=@i-5 MINUTE) AS result_date
FROM
 generator_256
CROSS JOIN
 (SELECT @i:=5, @start_date:=FROM_UNIXTIME( TRUNCATE(UNIX_TIMESTAMP(NOW()) / 300,0) * 300)) AS init
WHERE 
    DATE_ADD(@start_date, INTERVAL @i MINUTE) > NOW() - INTERVAL 60 minute

【讨论】:

  • 我根本不喜欢在 sql 中这样做
猜你喜欢
  • 2020-07-06
  • 1970-01-01
  • 2017-01-10
  • 2012-07-23
  • 2016-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多