sql 查詢時間段,有數(shù)據(jù)的顯示出來,沒有數(shù)據(jù)的補充0

對于這個問題,網(wǎng)上找了很多示例,絕大部分都是 依賴于創(chuàng)建的時間表然后進行外連接解決

廢話不多說,上demo

1.數(shù)據(jù)庫中選擇任意一個有數(shù)據(jù)的表,例如我選擇的是 ak_customer表

```

SELECT? ? ?@cdate := DATE_ADD( @cdate, INTERVAL - 1 DAY ) date,? ?0 AS day_count

FROM? ? ?( SELECT @cdate := DATE_ADD( CURDATE( ), INTERVAL - 10 DAY ) FROM ak_customer ) t1? WHERE? ? @cdate > '2021-06-03'

```

查詢結(jié)果如下:


選擇一統(tǒng)計時間開始時間,我的開始時間選擇的是2021-06-03,結(jié)束時間默認是當(dāng)前日期。

2.將自己要統(tǒng)計的數(shù)據(jù),按我們自己的要求寫出來,當(dāng)然此時,肯定顯示的都是有數(shù)據(jù)的記錄統(tǒng)計結(jié)果:?

```

select DATE_FORMAT( create_time, '%Y-%m-%d' ) AS date ,COUNT(*) as day_count

from ak_customer group by date

```

查詢結(jié)果如下:


此時沒有記錄的時間,就沒有展示在結(jié)果中。

3.聯(lián)合查詢將沒有記錄的時間補0

```

select date,Max(day_count) day_count from (

SELECT

? ? @cdate := DATE_ADD( @cdate, INTERVAL - 1 DAY ) date,

? ? 0 AS day_count

FROM

? ? ( SELECT @cdate := DATE_ADD( CURDATE( ), INTERVAL - 10 DAY ) FROM ak_customer ) t1

WHERE

? ? @cdate > '2021-06-03'? union

select * from (

????select DATE_FORMAT( create_time, '%Y-%m-%d' ) AS date ,COUNT(*) as day_count

????from ak_customer? group by date

????)t2

) a GROUP BY date ASC

```

查詢結(jié)果如下:


上面要求1、2 的記錄條數(shù)字段名字一樣,我選擇的都是 day_count?結(jié)果就是沒有數(shù)據(jù)的時間補上數(shù)據(jù)0了

總結(jié):當(dāng)然還有別的方法,不過這個方法不用創(chuàng)建任何的存儲過程,是相對來說簡單一點的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容