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~2020-12-25 區間所有日期: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
第三步:時間表/資料表關聯查詢
使用左外聯接查詢:
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後面跟日誌內容 這...