一般情況下,你使用可以產生在MySQL一系列的N個整數:
select (@i:[email protected]+1)-1 as `myval` from someTable,(SELECT @i:=0) gen_sub limit N
請注意,您在(someTable)加入該表必須至少有N行。上面的-1是爲了使它基數爲零...刪除它,你會得到N = 3的1,2,3。
您可以將這些整數輸入到DATE_ADD函數中以將其轉換爲一系列日期。爲了便於理解,我們使用日期的一些用戶變量。
SET @date_min = '2016-03-04';
SET @date_max = '2016-03-10';
select DATE_ADD(@date_min, INTERVAL (@i:[email protected]+1)-1 DAY) as `date`
from information_schema.columns,(SELECT @i:=0) gen_sub
where DATE_ADD(@date_min,INTERVAL @i DAY) BETWEEN @date_min AND @date_max
這將返回那些日子和他們之間的每一天的行。現在,它只是一個加入反對你的表的事...我還沒有嘗試過,因爲我沒有你的數據庫結構,但像下面應該工作:
SET @date_min = '2016-03-04';
SET @date_max = '2016-03-10';
SELECT
date_generator.date,
ifnull(SUM(val1),0) as sum_val
from (
select DATE_ADD(@date_min, INTERVAL (@i:[email protected]+1)-1 DAY) as `date`
from information_schema.columns,(SELECT @i:=0) gen_sub
where DATE_ADD(@date_min,INTERVAL @i DAY) BETWEEN @date_min AND @date_max
) date_generator
left join table1 on table1.date = date_generator.date
GROUP BY date;
你需要使用一個額外的表用日曆或程序製作臨時表的日期範圍爲 – splash58
有沒有其他方法可以做到這一點? –
只是循環一個月,並作出條件,如果它的匹配與你的存在日期,那麼不需要插入數據,而是再加上0. – RJParikh