一尘不染

在MySQL中等效于generate_series()

mysql

我需要进行查询并与一年中的所有日子一起加入,但是在我的数据库中没有日历表。
谷歌搜索后,我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 ..

阅读 841

收藏
2020-05-17

共1个答案

一尘不染

这就是我的方法。它创建了从 2011-01-012011-12-31 的日期范围:

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 可以是该查询中使用的表之一。

2020-05-17