1.要获得从指定日期到今天的每一天的日期
select date_format(assigned_date,’%Y-%m-%d’) assigned_date
from
(select adddate(‘2014-01-01’,t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) assigned_date
from
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3
) c
where assigned_date between ‘2016-07-01’ and NOW();
结果:
2.数据求笛卡尔积
比如你现在有一张这样的表:member_info
现在你需要根据时间和会员的注册渠道做一个笛卡尔积cross join,因为你需要每一天的时间和每一天的注册渠道作为一个主轴,来进行后续的工作。
那么你的SQL就是:
select a.assigned_date,b.regist_channel
FROM
(
select date_format(assigned_date,’%Y-%m-%d’) assigned_date
from
(select adddate(‘2014-01-01’,t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) assigned_date
from
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3
) c
where assigned_date between ‘2016-09-01’ and NOW()
)a
cross join
(
select member_id,regist_time,regist_channel from member_info
)b
3.关于left join
选定一张表作为主表来left join,那么这个主表里有的数据在结果中都会有,后面的每一张表都是相当于跟这个主表来left join。