MySQL中的generate_series()等价物我需要进行查询并加入一年中的所有日子,但在我的数据库中没有日历表。google-ing后我generate_series()在PostgreSQL中找到了。MySQL有类似的东西吗?我的实际表格如下:date qty1-1-11 31-1-11 44-1-11 26-1-11 5但我的查询必须返回:1-1-11 72-1-11 03-1-11 04-1-11 2and so on ..
3 回答
FFIVE
TA贡献1797条经验 获得超6个赞
我就是这样做的。它创建了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
TA贡献1836条经验 获得超13个赞
@Karolis增强版解决方案确保其适用于任何一年(包括闰年):
从(选择日期) 选择 日期格式( adddate('2011-1-1',@ num:= @ num + 1), '%Y-%间 - %d' )约会 从 any_table, (选择@num:= - 1)num 限制 366)作为dt年(日期)= 2011年
慕容3067478
TA贡献1773条经验 获得超3个赞
我正在寻找这个解决方案,但没有“硬编码”的日期,我想出了一个有效的当年(从这个答案得到帮助)。请注意
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
添加回答
举报
0/150
提交
取消