日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

MySQL統計近30天的數據,無數據的填充0。 這個應該是我們在做統計分析的時候,經常遇到的一個需求。

先說一般的實現方式,就是按照日期進行分組,但是這樣會有一個問題,如果數據庫表中有一天沒有數據,那么是統計不出來結果的。類似下圖

2020-01-01  10
2020-01-03  20
2020-01-04  4

這個時候,我們發現,2020-01-02 這一天是沒有數據的,我們希望沒有數據的這一天也能返回日期,而對應的數據是0,期望如下:

2020-01-01  10
2020-01-02  0
2020-01-03  20
2020-01-04  4

這時候,單單group by就沒辦法實現了。

那應該怎么辦呢?

一般情況就是我們應該先獲取一個日期的虛擬表,把這30天的時間都列出來,然后用這個日期虛擬表再去關聯我們的業務表,關聯沒數據的值設置為空即可,那么怎么得到近30天的日期的,給出sql實現方式

SELECT
    @s := @s + 1 AS indexs,
    DATE_FORMAT( DATE( DATE_SUB( CURRENT_DATE, INTERVAL @s DAY ) ), '%Y-%m-%d' ) AS dates 
FROM
    mysql.help_topic,
    ( SELECT @s := -1 ) temp  #不想包含當天,@s:=0
WHERE
    @s < 30 
ORDER BY
    dates 

運行得到的結果如下

Mysql統計近30天的數據,無數據的填充0

 

當然可根據自己的需要進行排序,時間有了,接下來直接關聯自己的業務表就可以了,給出demo:

SELECT
	date_table.dates AS dateValue,
	IFNULL( temp.count, 0 ) AS count 
FROM
	(
	SELECT
		@s := @s + 1 AS indexs,
		DATE_FORMAT( DATE( DATE_SUB( CURRENT_DATE, INTERVAL @s DAY ) ), '%Y-%m-%d' ) AS dates 
	FROM
		mysql.help_topic,
		( SELECT @s := 0 ) temp 
	WHERE
		@s < 30 
	ORDER BY
		dates 
	) date_table
	LEFT JOIN (
	SELECT LEFT
		( create_time, 10 ) AS dateValue,
		count( * ) AS count 
	FROM
		monitor_log_record t1 
	WHERE
		t1.log_type = 1 
		AND t1.error_type = 1 
		AND t1.project_id = 1 
	GROUP BY
		LEFT ( create_time, 10 ) 
	) temp ON date_table.dates = temp.dateValue 
ORDER BY
	date_table.dates DESC

好了,記錄一下,希望可以幫助到你。有幫助的話記得點贊收藏加關注,感謝!!

分享到:
標簽:Mysql
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定