实时在线查询sql

场景:经过处理入库的记录都是当时在线的用户数,即一个唯一的uuid就可以表示这是一个当时的在线用户。现在要求查询出

实时在线用户数,这个"实时"肯定是最近的一个时间区间。我们取这个时间区间为5分钟。

 

数据也是5分钟入一次库。更精确的说法是,我们的"实时数据"是最近一次完整的5分钟区间。为什么要强调完整呢?因为入库的

时间并不能和刷新的时间做到同步,有可能页面正在刷新数据的时候,此时最近一次还没有完全入库。假设最后一次5分钟end5min

和倒数第二个5分钟last5min,根据此时的情况,我们会取到last5min和end5min各自一部分的数据,而此时的情况应该是取

last5min阶段入库的数据。

 

如何满足我们的最近"完整"5分钟数据呢?

将今天凌晨到当前时间的记录以5分钟为一组进行分组。

24*60/5=288 

也就是说:一天可以分成288个5分钟的段。

 

假设凌晨时间为date,入库的每条记录的时间字段为logtime。

logtime-to_date(date,'yyyy-mm-dd')

这样就算出了入库时间距离当天凌晨的时间间隔。这个时间间隔是以天为单位的。这个小数就可以看成logtime距离凌晨这段

时间间隔在这一天中所占的比重。于是根据这个时间间隔就可以将logtime进行分组。因为一天的分组为288,如果将logtime

在这一天中所占的比重与总的分组数288相乘,就可以将logtime归于相应的分组当中去。

group_num=trunc((logtime-to_date(date,'yyyy-mm-dd'))*1440/5)

 

算出每一组的在线用户数:count(DISTINCT uuid)

 

此外,我们会定一个定时器,以0点为起点,每5分钟刷新一次页面。

__1__2__3_

假设我们在时间点1刷新了一次数据,那么在页面上就会将时间点1记下来,在下一次查询分组时,就会以时间点1(lastdate)作为查询条件进行查询,找到相应的分组。然而,我们得到的中间表是分组号。于是我们又要根据分组号转换成对应的时间:

logtime=group_num*5/1440+to_date(date,'yyyy-mm-dd')

于是:

SELECT (TO_DATE(date, 'yyyy-mm-dd hh24:mi') + group_num * 5 / (24 * 60)) LOGTIME
所以就可以以时间点1为条件进行查询了。

 

 

具体的sql语句如下:

SELECT num as nowNum FROM ( SELECT (TO_DATE(date, 'yyyy-mm-dd hh24:mi') + group_num * 5 / (24 * 60)) LOGTIME,NUM FROM (SELECT TRUNC((LOGTIME - TO_DATE(date, 'yyyy-mm-dd')) * 1440 / 5) group_num, count(DISTINCT uuid) NUM FROM ONLINE_COUNT WHERE LOGTIME BETWEEN  TO_DATE(date, 'yyyy-MM-dd hh24:mi:ss') AND  sysdate  GROUP BY TRUNC((LOGTIME - TO_DATE(date, 'yyyy-mm-dd')) * 1440 / 5) ORDER BY group_num) T ) WHERE logtime = to_date(lastdate,'yyyy-MM-dd hh24:mi:ss')

 

转载于:https://www.cnblogs.com/feijishuo/p/4581409.html

由于微软默认提供的企业管理器,很多用户使用困难,有不少用户也没有安装这个软件.另外很多用户将数据库服务器的远程连接给关掉或者将数据库服务器安装在局域网内 使得外部的使用管理有了不少的麻烦,SSOM系统可以安装在你的内部服务器上,这样外部用户直接用(local)连接就可以管理了 在mysql服务器管理中,目前用phpmyadmin软件进行在线管理,而SQL Server(mssql)也需要类似这样一款在线管理工具,就这样由BBSGOOD团队开发的针对mssql管理的SSOM系统诞生了. 该系统可以在线管理已创建的SQL Server(mssql)数据库,目前主要功能如下: 连接你的SQL数据库,进行 1.建立,删除,修改数据表 2.建立,删除,修改每个表的字段操作 3.SQL语句执行容器,可以执行所有的SQL语句,包括存储过程,也可以检索、插入、更新、删除记录等操作 4.进行数据库的备份 目前该产品首次测试发布编码为中国大陆的GB2312编码 使用说明: 1.在数据库地址一栏中,输入你数据库服务器的IP地址,如果和本系统是同机的话,也可以用(local)来连接 输入你的数据库名称,数据库访问的帐号和密码,点击登陆即可. 2.登陆后,点击左栏的数据库,即可管理数据库中所有的表,字段,记录等数据. 3.点击左栏的SQL语句,还可以运行sql脚本,你所需要的操作均可以完成,包括用select语句查询出记录. 4.点击左栏的数据库备份,就可以对你的数据库进行备份了,注意备份的路径是数据库服务器上面的路径.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值