根据时间间隔取数

编辑
  • 文档创建者:文档助手1
  • 浏览次数:11658次
  • 编辑次数:16次
  • 最近更新:Kevin-s 于 2019-06-03
  • 1. 描述

    当数据库里面数据量很大,有个时间字段,而且时间字段是每分或每秒都会有一条数据生成的时候。我们可以通过时间间隔来筛选数据,从而显示想要浏览的数据。

    例如:在 starttime 和 endtime 里面输入查询时间的范围,然后在 number 里面输入间隔数:3,意思就是只显示每隔 3 秒的数据。




    2. 实现步骤

    由于不同的数据库,SQL 语句会有所不同,下面先以 MySQL 数据库为例进行讲解:

    2.1 数据库表

    假设已经存在数据库表 datetest,如下图:


    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,如下图:


    2.2 表样设计

    依据下图设置表样:


    给 C2 添加条件属性,当值不为 0 时,当前行隐藏,如下图:


    2.3 参数设计

    点击参数界面面板,按照下图设置参数界面:


    2.4 分页预览

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


    3. 其他数据库

    3.1 SQL Server 数据库


    说明:

    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 *,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 + "'") }

    (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=秒数


    附件列表


    主题: 参数应用
    标签: 暂无标签 编辑/添加标签
    如果您认为本文档还有待完善,请编辑

    文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
    关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
    若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

    此页面有帮助吗?只是浏览 [ 去社区提问 ]