历史版本14 :通过时间间隔从大数据量中筛选数据 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 描述编辑

当数据库里面数据量很大,有个时间字段,而且时间字段是每分或每秒都会有一条数据生成的时候。我们可以通过时间间隔来筛选数据,从而显示想要浏览的数据。
例如:在starttimeendtime里面输入查询时间的范围,然后在number里面输入间隔数:3,意思就是只显示每隔3秒的数据。
222


2. 实现步骤编辑

由于不同的数据库,SQL语句会有所不同,下面先以mysql数据库为例进行讲解:
2.1 数据库表
假设已经存在数据库表datetest,如下图:
222
2.1 增加数据集
新建工作簿,添加数据集ds1,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 +"'")}
说明:在MYSQL中,datediff函数用于计算两个时间的日期差,timestampdiff用于计算两个时间的指定单位的时间差,参数可以是年、季度、月、日、时、分、秒等,
参数为FRAC_SECOND表示毫秒;  SECOND,秒;MINUTE,分钟;HOUR,小时;DAY,天;WEEK,星期;MONTH,月;QUARTER,季度;YEAR,年;
${number}  //这个是参数传过来间隔数,中间用%取模获取值为0的。
${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 +"'" //传过来开始时间和结束时间进行筛选。
刷新参数,给number参数设置默认值为1,如下图:
222
2.2 表样设计
依据下图设置表样:
222
给C2添加条件属性,当值不为0时,当前行隐藏,如下图:
222
2.3 参数设计
点击参数界面面板,按照下图设置参数界面:
222
2.4 分页预览

点击分页预览,输入开始时间,结束时间,间隔数就可以查询了。

3. 其他数据库编辑

3.1 Sql Server 数据库
SELECT *,datediff(s,convert(varchar(100),datets,111),convert(varchar(100),datets,120)) % ${number} AS 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 + "'") }
说明:
datediff(s,convert(varchar(100),datets,111),convert(varchar(100),datets,120))%${number} as jg   //DateDiff 函数可用来决定两个日期之间所指定的时间间隔数目。
${number} //这个是参数传过来间隔数,中间用%取模获取值为0的。
${if(len(starttime)==0,"","and CONVERT(varchar(100),datets,120)>='"+ starttime +"'")}  //判断一下如果starttime为空的时候查询所有时间,否则根据CONVERT(varchar(100),datets,120)>='"+ starttime +"'  //传过来参数进行筛选。
3.2 oracle数据库
SELECT "id","datets", mod((("TO_DATE" ( "TO_CHAR" ( "datets", 'YYYY-MM-DD HH24:MI:SS' ) , 'YYYY-MM-DD HH24:MI:SS' ) - "TO_DATE" ("TO_CHAR" ( "datets", 'YYYY-MM-DD' ),'YYYY-MM-DD'))*24*60*60),${number}) AS jg FROM "datetest" WHERE 1 = 1 and "datets" BETWEEN to_date('${starttime}','YYYY-MM-DD HH24:MI:SS') and to_date('${endtime}','YYYY-MM-DD HH24:MI:SS')
(to_date(datets,'yyyy-mm-dd hh24:mi:ss')-to_date(datets,'yyyy-mm-dd 00:00:00')*24*60*60)
(to_date(datets,'yyyy-mm-dd hh24:mi:ss')-to_date(datets,'yyyy-mm-dd 00:00:00') //返回的是天数值,*24=小时数,*60=分钟数,*60=秒数