我有一個查詢一樣,MySQL的每日計數IFNULL零
SELECT count(*), cdate
FROM tabl
GROUP BY YEAR(cdate), MONTH(cdate), DAY(cdate);
這是回訪每日計數,但僅適用於存在於列CDATE,我想了好幾天的最後X量均天,包括天那些零計數。我怎樣才能做到這一點?
CDATE格式%Y-%間%d
我有一個查詢一樣,MySQL的每日計數IFNULL零
SELECT count(*), cdate
FROM tabl
GROUP BY YEAR(cdate), MONTH(cdate), DAY(cdate);
這是回訪每日計數,但僅適用於存在於列CDATE,我想了好幾天的最後X量均天,包括天那些零計數。我怎樣才能做到這一點?
CDATE格式%Y-%間%d
這個查詢只能返回在表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);
你使用MySQL或MariaDB嗎? MariaDB不需要額外的表格 –
使用MySQL。我想我知道了,所以爲了獲得最後X天,我只是使用t.cdate BETWEEN? – Bob
如果你有一個數字表,那麼你可以使用它。否則,你可以使用一個技巧。這樣的事情:
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
子句以獲得所需的任意天數。
你不能沒有額外的工作。 mysql無法/不會無法創建行/記錄。如果你想要列出沒有記錄的日子,你需要提供 - 例如一個臨時表,它包含您想要的範圍內的每個日期的日期,您可以加入。 –