2015-10-26 97 views
0

我有一個查詢一樣,MySQL的每日計數IFNULL零

SELECT count(*), cdate 
FROM tabl 
GROUP BY YEAR(cdate), MONTH(cdate), DAY(cdate); 

這是回訪每日計數,但僅適用於存在於列CDATE,我想了好幾天的最後X量均天,包括天那些零計數。我怎樣才能做到這一點?

CDATE格式%Y-%間%d

+1

你不能沒有額外的工作。 mysql無法/不會無法創建行/記錄。如果你想要列出沒有記錄的日子,你需要提供 - 例如一個臨時表,它包含您想要的範圍內的每個日期的日期,您可以加入。 –

回答

0

這個查詢只能返回在表tabl可用的數據。

要獲取所有日子的信息,您需要一些包含日期行的表。通常情況下,我會用一個日期維度表,並與tabl如下加入吧:

SELECT ISNULL(count(1), 0), cdate 
FROM DimDate D 
LEFT JOIN tabl T ON D.Date = T.cdate 
GROUP BY YEAR(D.Date), MONTH(D.Date), DAY(D.Date); 
+0

你使用MySQL或MariaDB嗎? MariaDB不需要額外的表格 –

+0

使用MySQL。我想我知道了,所以爲了獲得最後X天,我只是使用t.cdate BETWEEN? – Bob

0

如果你有一個數字表,那麼你可以使用它。否則,你可以使用一個技巧。這樣的事情:

select date_sub(curdate, 1 - interval n.n day) as thedate, 
     count(t.cdate) 
from (select (@rn := @rn + 1) as n 
     from tabl 
     limit 100 
    ) n left join 
    tabl t 
    on t.cdate = date_sub(curdate, 1 - interval n.n day) 
group by n.n; 

這基本上使用您現有的表數回「n」天(在這種情況下100)。假設表格足夠大,您可以調整limit子句以獲得所需的任意天數。