在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-01到2011-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