Mysql查詢一段時間內資料,空資料預設為0

2022-08-19 00:15:09 字數 3147 閱讀 9013

1、需求

2、第一步:資料表查詢

3、第二步:日期表查詢

4、第三步:時間表/資料表關聯查詢

5、第四步:使用mybatis動態控制查詢日期區間

正文開始

需求:

查詢一段時間內 每天資料量 ,沒有資料預設為0

第一步:資料表查詢

分組查詢sql如下,查詢 2020-12-20 ~ 2020-12-25 區間資料:  

select

count(*) count,date_format(ride_time,'

%y-%m-%d

') ride_time

from

tab_visitor_ride_record

where ride_time >= date_format('

2020-12-20

','%y-%m-%d

') and ride_time <= date_format('

2020-12-25

','%y-%m-%d')

group

by date_format(ride_time,'

%y-%m-%d

')

結果只會出現已有日期的資料:

以上結果顯然是不符合需求的 ,那麼就需要鏈結日期表進行關聯查詢

第二步: 日期表查詢

日期表查詢如下,需要指定開始日期以及查詢日期天數

select date_add('

2020-12-20

',interval @i:=@i+

1day) as

date

from

(

select

1union

allselect

1union

allselect

1union

allselect

1union

allselect

1union

allselect1)

astmp,

(select

@i:=

-1) t

結果返回 2020-12-20~2020-12-25 區間所有日期:

第三步:時間表/資料表關聯查詢

使用左外聯接查詢:

select d.date, ifnull(t.count,0) count

from

(

select date_add('

2020-12-20

',interval @i:=@i+

1day) as

date

from

(

select

1union

allselect

1union

allselect

1union

allselect

1union

allselect

1union

allselect1)

astmp,

(select

@i:=-1

) t) d

left

join

(

select

count(*) count,date_format(ride_time,'

%y-%m-%d

') ride_time

from

tab_visitor_ride_record

where ride_time >= date_format('

2020-12-20

','%y-%m-%d

') and ride_time <= date_format('

2020-12-25

','%y-%m-%d')

group

by date_format(ride_time,'

%y-%m-%d')

) t

on t.ride_time =

d.date

group

by d.date

結果如下:

第四步:使用mybatis動態控制查詢日期區間

首先要動態控制日期,就要知道範圍內的日期個數,建立查詢條件為陣列:  

private string days;
這裡在service層計算:

//

計算時間天數跨度

query.setdays(new string[(int) ((query.getendtime().gettime() - query.getstarttime().gettime()) / (1000 * 60 * 60 * 24))]);

select d.date, ifnull(t.count,0) count

from

(select date_add(date_format(#,'%y-%m-%d'),interval @i:=@i+1day) as date

from (

select 1

union all select 1

) as tmp,

(select @i:= -1) t

) dleft join (

/**你自己的業務邏輯

*/)t on t.date =d.date

完結撒花

linux ted查詢一段時間內日誌

結論 所要查詢的起始時間 和 結束時間必須在日誌檔案中有相等的時間,否則 case 1 若起始時間沒有相等,則查詢無效。case 2,若結束時間沒有相等,而起始時間有相等,則查詢結果會從起始時間一直到日誌檔案結束。日誌檔案 logdemo1.log 內容如下 2021 01 03 10 46 00,...

Pgsql之查詢一段時間內的所有日期

前幾天幹活兒的時候,專案中有這麼個需求,需要用pgsql查詢兩個日期間的所有日期,包括年月日,下面貼 1 select date t as day2 from 3 generate series 2020 10 27 date,2020 11 03 1 days as t 下面是執行效果,跨年跨月的...

linux 如何擷取一段時間內log日誌

擷取一段時間內的登入日誌可以使用sed命令對日誌檔案進行抽取操作 如圖1所示,sed檢視某時間段到現在的系統日誌 sed n may 20 17 p var log messages less2,sed截選時間段日誌 假如 日誌的格式是 2015 05 04 09 25 55606後面跟日誌內容 這...