1. 程式人生 > >mysql獲取從某個時間到今天的每一天的日期,以及笛卡爾積

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。