使用 mySql while 循环创建时间数据集
creating a time dataset by using mySql while loop
我正在尝试使用 WHILE 循环创建一个包含 30 个日期的时间数据集。
我这样做是因为我无法在 mySql 5.7 中使用 CTE。
之后我会将这个数据集嵌入到子查询中。
因此,假设时间数据集应如下所示 -
Date
29/05/2022
28/05/2022
27/05/2022
...
29/04/2022
我试图纠正一个 WHILE 循环,如下所示,但没有成功..
如果有人有想法,我们将不胜感激。
set @i = DATE_ADD(CURRENT_DATE(), DAY -2 INTERVAL)
set @timeset = select CURRENT_DATE()
while @i < CURRENT_DATE() DO
timeset = @timeset
union
select DATE_ADD(@timeset , DAY 1 INTERVAL)
set @i = DATE_ADD(@i, DAY 1 INTERVAL)
end WHILE
谢谢!
如果在循环中执行 SELECT,每一行将是其自己的结果集。可能不是你想要的。
如果您需要即时生成它,我会选择将其作为一个查询而不使用循环,例如这样的事情:
select current_date() + interval d10.n+d1.n day
from (
select 0 as n union select 1 union select 2 union select 3
union select 4 union select 5 union select 6 union select 7
union select 8 union select 9
) as d1
cross join (
select 0 as n union select 10 union select 20
) as d10;
这确实很尴尬。这就是为什么上面的评论建议创建一个每天预填充一行的“日历 table”,然后您可以查询 table 的一系列行。即使你在接下来的 100 年里每天都用一行填充它,那也只有大约 36525 行,对吧?按照 MySQL 标准,仍然不是很大 table。
或者您可以升级到 MySQL 8.0,无论如何您都应该在 October 2023 之前升级,因为那是 MySQL 5.7 的生命周期结束的时候。
我正在尝试使用 WHILE 循环创建一个包含 30 个日期的时间数据集。 我这样做是因为我无法在 mySql 5.7 中使用 CTE。 之后我会将这个数据集嵌入到子查询中。 因此,假设时间数据集应如下所示 -
Date |
---|
29/05/2022 |
28/05/2022 |
27/05/2022 |
... |
29/04/2022 |
我试图纠正一个 WHILE 循环,如下所示,但没有成功.. 如果有人有想法,我们将不胜感激。
set @i = DATE_ADD(CURRENT_DATE(), DAY -2 INTERVAL)
set @timeset = select CURRENT_DATE()
while @i < CURRENT_DATE() DO
timeset = @timeset
union
select DATE_ADD(@timeset , DAY 1 INTERVAL)
set @i = DATE_ADD(@i, DAY 1 INTERVAL)
end WHILE
谢谢!
如果在循环中执行 SELECT,每一行将是其自己的结果集。可能不是你想要的。
如果您需要即时生成它,我会选择将其作为一个查询而不使用循环,例如这样的事情:
select current_date() + interval d10.n+d1.n day
from (
select 0 as n union select 1 union select 2 union select 3
union select 4 union select 5 union select 6 union select 7
union select 8 union select 9
) as d1
cross join (
select 0 as n union select 10 union select 20
) as d10;
这确实很尴尬。这就是为什么上面的评论建议创建一个每天预填充一行的“日历 table”,然后您可以查询 table 的一系列行。即使你在接下来的 100 年里每天都用一行填充它,那也只有大约 36525 行,对吧?按照 MySQL 标准,仍然不是很大 table。
或者您可以升级到 MySQL 8.0,无论如何您都应该在 October 2023 之前升级,因为那是 MySQL 5.7 的生命周期结束的时候。