mysql获取从某个时间到今天的每一天的日期,以及笛卡尔积

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。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值