猿问

MySQL中的generate_series()等价物

MySQL中的generate_series()等价物

我需要进行查询并加入一年中的所有日子,但在我的数据库中没有日历表。

google-ing后我generate_series()在PostgreSQL中找到了。MySQL有类似的东西吗?


我的实际表格如下:


date     qty

1-1-11    3

1-1-11    4

4-1-11    2

6-1-11    5

但我的查询必须返回:


1-1-11    7

2-1-11    0

3-1-11    0

4-1-11    2

and so on ..


慕田峪9158850
浏览 1719回答 3
3回答

FFIVE

我就是这样做的。它创建了2011-01-01至2011-12-31的一系列日期:select      date_format(         adddate('2011-1-1', @num:=@num+1),          '%Y-%m-%d'     ) datefrom      any_table,         (select @num:=-1) num limit      365-- use limit 366 for leap years if you're putting this in production唯一的要求是any_table中的行数应该大于或等于所需范围的大小(在此示例中> = 365行)。您很可能将其用作整个查询的子查询,因此在您的情况下,any_table可以是您在该查询中使用的表之一。

开心每一天1111

@Karolis增强版解决方案确保其适用于任何一年(包括闰年):从(选择日期)     选择         日期格式(         adddate('2011-1-1',@ num:= @ num + 1),         '%Y-%间 - %d'     )约会     从         any_table,     (选择@num:=  -  1)num     限制         366)作为dt年(日期)= 2011年

慕容3067478

我正在寻找这个解决方案,但没有“硬编码”的日期,我想出了一个有效的当年(从这个答案得到帮助)。请注意where year(date)=2011因为选择已经过滤了日期,所以不需要。同样,这样,使用哪个表(至少如表中所述之前至少有366行)并不重要,因为日期是在运行时“计算”的。 select date from (     select         date_format(         adddate(MAKEDATE(year(now()),1), @num:=@num+1),         '%Y-%m-%d'     ) date    from         your_table,     (select @num:=-1) num     limit        366 ) as dt
随时随地看视频慕课网APP
我要回答