當前為10.0版本文檔,更多實例內容將在最新幫助文檔中展現,點選跳轉至 最新版幫助文檔

根據時間間隔取數

1. 概述

1.1 預期效果

當數據庫中某張表有時間字段,且幾乎每分每秒都會有一條數據生成,爲減少報表顯示數據量,我們可以通過時間間隔來篩選數據,僅顯示部分數據。

例如:在 starttime 和 endtime 裏面輸入時間查詢範圍,在 number 裏面輸入間隔數 3,按 3 秒時間間隔篩選數據,效果如下圖所示:

222

1.2 實現思路

1)在 SQL 查詢中添加數據集參數,通過參數面板中控件給數參數賦值,SQL 根據傳遞的參數查出符合條件的數據。

2)給單元格添加條件屬性,通過隐藏單元格的方式顯示需要顯示的數據。

2. MySQL 數據庫示例   

不同的數據庫,SQL 語句會有所不同,下面以 MySQL 數據庫爲例進行講解。假設已經存在數據庫表 datetest,其中每隔 1 秒就會有一筆數據,如下圖所示:

222

2.1 新建數據集

新建模板,新建數據集 ds1,如下圖所示:

222

SQL 語句爲:

SELECT *,timestampdiff(SECOND,date_format(datets, '%Y-%m-%d'),date_format(datets, '%Y-%m-%d %H:%i:%s')) % ${number} as jg 
FROM 
  datetest 
where 
  1=1 
  ${if(len(starttime)==0,"","and date_format(datets,'%Y-%m-%d %H:%i:%s') >='"+ starttime +"'")} 
  ${if(len(endtime)==0,"","and date_format(datets,'%Y-%m-%d %H:%i:%s') <='"+ endtime +"'")}

注:數據庫中日期存儲爲日期格式或字符串格式,SQL 語句的寫法會有不同,可根據實際場景調整。

SQL 語句說明:

1)SQL 語句中有 3 個數據集參數,分别是 number,starttime,endtime。其中 number 用來傳遞篩選間隔數,默認值設置爲 1,starttime 用來傳遞開始時間,endtime 用來傳遞結束時間,将會對應參數面板上的文本控件框和時間篩選框。

2)MySQL 中,timestampdiff 函數用於計算兩個時間的指定單位的時間差,參數可以是年、季度、月、日、時、分、秒等。date_format 函數用於以不同的格式顯示日期/時間數據。

3)% 爲取餘函數,通過對時間差取餘的方式,通過對時間差取餘,實現按一定時間間隔抽取數據的功能。

2.2 設計模板樣式

1)将數 ds1 據集字段依次拖入單元格 A1、B1、C1單元格中,并設置單元格樣式,如下圖所示:

222

2)點擊 C2 單元格,爲其添加條件屬性,内容爲:當 C2 值不爲 0 時,設改該行的行高爲 0,即隐藏當前行,如下圖所示:

222

2.3 設置參數控件

點擊「參數面板」,添加參數控件後設置控件屬性,其中 starttime,endtime 爲日期控件,number爲文本控件。如下圖所示:

222

2.4 預覽效果

保存模板後,點擊「分頁預覽」,輸入開始時間、結束時間、間隔數,查詢後結果如 1.1 節預期效果所示。

3. 其他數據庫 SQL 示例

3.1 SQL Server 數據庫

SELECT *,datediff(s,convert(varchar(100),datets,111),convert(varchar(100),datets,120)) % ${numberAS jg 
FROM 
dbo.datetest 
WHERE 1 = 1 
${IF(len(starttime) == 0,"","and CONVERT(varchar(100),datets,120)>='" + starttime + "'")} 
${IF(len(endtime) == 0,"","and CONVERT(varchar(100),datets,120)<='" + endtime + "'") }

注:數據庫中日期存儲爲日期格式或字符串格式,SQL 語句的寫法會有不同,可根據實際場景調整。

SQL 語句說明:

1)SQL 語句中有 3 個數據集參數,分别是 number,starttime,endtime。其中 number 用來傳遞篩選間隔數,默認值設置爲 1,starttime 用來傳遞開始時間,endtime 用來傳遞結束時間。

2)SQL Server 中,datediff 函數返回兩個日期之間的時間,參數可以是年、季度、月、日、時、分、秒等。CONVERT() 函數是把日期轉換爲新數據類型的通用函數,也可以顯示不同的格式的日期。

3)%爲取餘函數,通過對時間差取餘,實現按一定時間間隔抽取數據的功能。

3.2 Oracle 數據庫

SELECT *,to_char(datets,'yyyy-mm-dd hh24:mi:ss'),mod((datets - to_date(to_char(datets, 'yyyy-mm-dd'),'yyyy-mm-dd'))
24 * 60 * 60,${number}) AS jg 
from dbo.datetest 
where 1=1
${IF(len(starttime) == 0,"","and to_char(datets,'yyyy-mm-dd')>='" + starttime + "'")} 
${IF(len(starttime) == 0,"","and to_char(datets,'yyyy-mm-dd')<='" + endtime + "'") } 

注:數據庫中日期存儲爲日期格式或字符串格式,SQL 語句的寫法會有不同,可根據實際場景調整。

SQL 語句說明:

1)SQL 語句中有 3 個數據集參數,分别是 number,starttime,endtime。其中 number 用來傳遞篩選間隔數,默認值設置爲 1,starttime 用來傳遞開始時間,endtime 用來傳遞結束時間。

2)SQL Server 中,to_date 函數将字符類型按一定格式轉換爲日期類型,to_char 函數将日期類型按一定格式轉換爲字符類型。上述SQL 中datets-to_date(to_char(datets, 'yyyy-mm-dd'),'yyyy-mm-dd') 返回天數,所以通過  * 24 * 60 * 60 的方式得到秒數。

3)mod 爲取餘函數,通過對時間差取餘,實現按一定時間間隔抽取數據的功能。

附件列表


主題: 原簡體文檔
  • 有幫助
  • 沒幫助
  • 只是瀏覽

文 檔回 饋

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

反饋已提交

網絡繁忙