使用 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 的生命周期结束的时候。