我們常常會遇到這樣的乙個場景,老闆想要看折線圖,最近每天使用者的總增長數,比如2021.01.17 總人數為396,2021.01.18 總人數為396(18號那天沒有新增,和17號的總數量持平),2021.01.19 總人數為403(19號新增了7人)等等。此時sql怎麼寫?
話不多說,先上sql
select
s.date as "日期",
(select count(1) from t_contract t1 where date_format(t1.create_time,'%y-%m-%d') <= s.date) as "總量"
from(
select date_add(date_sub(curdate(),interval 13 day),interval @i:=@i+1 day) as date
from (
select 1
union all select 1
union all select 1
union all select 1
union all select 1
union all select 1
union all select 1
union all select 1
union all select 1
union all select 1
union all select 1
union all select 1
union all select 1
union all select 1
) as tmp,
(select @i:= -1) t
) s;
來,抽絲剝繭,一步步看
date_sub(date,interval expr type) 從日期減去指定的時間間隔
date引數:是合法的日期表示式
interval:代表時間間隔
expr引數:是希望新增的時間間隔
type引數:是時間型別,可以是下列值
microsecond
second
minute
hour
dayweek
month
quarter
year
second_microsecond
minute_microsecond
minute_second
hour_microsecond
hour_second
hour_minute
day_microsecond
day_second
day_minute
day_hour
year_month
例(查13天前的日期):
date_add(date,interval expr type) 從日期新增指定的時間間隔
用法與date_sub相同
(1)@是使用者變數
(2)初始化變數
使用set語句:set @i=2;
使用select語句:select @i:=2;
注:對於set,可以使用=或=:來賦值,對於select只能使用:=來賦值
@i:=@i+1
先執行@i+1,然後再賦值給@i,再根據要點④select @i:=-1
也就是說先初始化i=-1,再按+1遞增
這一大塊是為了湊成14條資料,資料內容是什麼都行,比如下圖
也能得到一樣的效果,只要有14條資料就行,只不過有不足14條的風險,所以沒有採用
為什麼要湊14條資料,因為要查詢最近兩周,結合前面的sql,從兩周前的日期2021-01-16開始,逐步遞增,得到想要的日期後,開始查詢數量
結合上述的日期,進而在查詢列中,查詢日期小於那天的條數
大功告成,得到最近兩周,每天總數量的變化
2011 9 5 17 兩周總結
中秋假期結束前的週末又給忘記了寫周總結,看來這習慣真是越養越偏了,不過話說回來,在下一周開始的時候再寫上一周的總結也能順便的回顧上週做過的東西,這樣來看貌似不錯。但是,在末尾時做那才叫總結嘛。好吧,看情況隨緣吧,反正是要寫的 中秋前的一周的主要工作是將資料解析做到完善,還有tcp通訊的對發接收的實現...
又過了兩周
時間過得真快,又過了兩周,算一下,眨眼睛回到北京乙個月了,但感覺都沒做啥。這兩周就讀了三本書,出去玩了兩個地方,以及瞎買了幾天彩票。一本是 走出軟體作坊 剩下的兩本是這本的衍生品,是在書中提到的,分別是 水煮三國 和 蛋白質女孩 對第一本,讀的過程中最大的感覺就是活著真難,誰都不容易。第二點感悟就是...
ElementUI Less Git 實習兩周總結
less的好處,排版好看,直觀,可以深度選擇單頁面的元件,使用 deep 來修改elementui的式樣,不影響其他頁面。一些語法 多人開發時git使用流程 乙個人建立新分支developv0.2.0,多人先在developv0.2.0上合,乙個迭代後再merge到master上 個人而言,先che...