在MySQL中相当于generate_series()

我需要做一个查询,并join一年的所有日子,但在我的分贝没有日历表。
谷歌后,我发现在PostgreSQL generate_series() 。 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 .. 

这是我如何做到的。 它创build了从2011-01-012011-12-31的一系列date:

 select date_format( adddate('2011-1-1', @num:=@num+1), '%Y-%m-%d' ) date from 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可以是你在查询中使用的表之一。

@Karolis解决scheme的增强版本确保它可以在任何一年(包括闰年)中工作:

selectdate从(
    select
        date格式(
         adddate('2011-1-1',@num:= @ num + 1),
         '%Y-%间 - %d'
     )date
    从
         any_table,
     (select@num:=  -  1)num
    限制
         366
 )作为dt
哪一年(date)= 2011年

我期待这个解决scheme,但没有“硬编码”的date,我想出了今年有效的(这个答案帮助)。 请注意

 where year(date)=2011 

不需要,因为select已经过滤date。 也是这样,因为date是在运行时“计算”的,所以使用哪个表(至less在表至less有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