下午看到项目有个统计报表的生成,其中XX表中记录相邻2条记录统计时间差 即
表中数据如下:
要求相邻2条记录 如第1条和第2条记录创建时间差统计出来
即
zhouhui 5秒
dingxiang 24秒
需求出来了需要解决,后来找到解决办法了
方法 1:
select t.username,(max( t.CREATIONDATE)-min(t.CREATIONDATE))*24*60*60,count(t.username)/2
from ofloginlog t
--where USERNAME = 'zhouhui'
group by t.username
通过分组 统计出用户在线时长(即前后2条记录作差)
效果图:
说明 最后一个字段我是用来统计 用户登录次数使用的。
oracle 两个时间相减默认的是天数
oracle 两个时间相减默认的是天数*24 为相差的小时数
oracle 两个时间相减默认的是天数*24*60
为相差的分钟数
oracle 两个时间相减默认的是天数*24*60*60 为相差的秒数
方法2:
select username, sum(b), count(username) / 2
from (select id, username, (CREATIONDATE - lgtime) * 24 * 60 * 60 as b
from (select t.*,
lag(type) over(partition by username order by CREATIONDATE) lgtype,
lag(CREATIONDATE) over(partition by username order by CREATIONDATE) lgtime
from ofloginlog t))
-- where USERNAME = 'zhouhui')
group by username
实现效果 一样 这里不帖了
又复习了一下基本的SQL 了 呵呵
20100520 需求有些变更 要求统计个数不是统计TYPE 1 和0 记录之和均值,只统计TYPE=0 的值,
这样SQL 的分组就不能这样了,想了一下改进了SQL
select g.username, g.time, h.count
from (select t.username,
floor((max(t.CREATIONDATE) - min(t.CREATIONDATE)) * 24 * 60 * 60) as time
from ofloginlog t, ofuser b
where 1 = 1
and t.username = b.username
group by t.username) g,
(select t.username, count(t.username) as count
from ofloginlog t
where t.type = '0'
group by t.username) h
where g.username = h.username
order by count desc
查询结果
分析 时间差是2个集合之间的差,而后面统计个数只是单独限制条件是TYPE=0的记录数,统计的数据个数就不一致,所以很难一个分组实现,思路是先实现 USERNAME 和TIME 的记录 在统计USERNAME和满足TYPE=0的记录个数 将2个结果合并 通过 SELECT XX FROM A B 2个临时表的内联关系实现合并结果集合
- 大小: 54.2 KB
- 大小: 16.4 KB
- 大小: 20.2 KB
分享到:
相关推荐
MSSQL SQL Server 使用 SQL 脚本实现相邻两条数据相减 MSSQL SQL Server 是一种关系型数据库管理系统,广泛应用于各种行业和领域。有时,我们需要对数据库中的数据进行操作,例如计算相邻两条数据的差异。在本文中...
SQL查找某记录的前后N条数据 SQL查找某记录的前后N条记录
sqlserver 计算数据库时间差sqlserver 计算数据库时间差sqlserver 计算数据库时间差sqlserver 计算数据库时间差sqlserver 计算数据库时间差
SQL把一条记录金额平分到n个人并进行汇总.txt,这里说的是Access数据库中,如何将同一条记录金额平分到n个人里,金额会按照实际人数进行平分,空的则不平分,如:一条记录有三个营业员字段,但是实际不知道有几个...
运用SQL随机抽取N条记录的方法,初学者
sql求时间差(XX天XX时XX分XX秒) select dbo.f_second_Time(datediff(ss,'2009-5-21 10:10:26','2009-7-22 10:19:06')) --62天00:08:40
SQL查询当前数据上一条和下一条的记录,管用,仅供参考!!!
按照company_id不同分组,然后分别求出相同company_id相邻记录touch_time的差值 SQL: select r1.company_id, r1.touch_time, r2.touch_time, r1.touch_time - r2.touch_time from (select (@rownum := @rownum ...
SQL查询最新充值记录余额.xls
组态王报警记录存储到SQL数据库中 组态王是一种流行的工业自动化软件,广泛应用于制造业、能源、交通等领域。该软件可以实现实时数据采集、监控和控制,提高生产效率和产品质量。但是,组态王的报警记录功能缺乏...
在许多应用中,需要保存某个数据表的历史记录,以供以后查询,在 SQL Server 2000 中,可以利用触发器轻松实现历史记录功能。 在触发器中,需要用到 SQL Server 的 inserted 和 deleted 两个虚拟表,在执行 sql ...
常见所需要的一些日期之间的差值,本月最后一天,本年度最后一天
SQL Server遍历表一般都要用到游标,SQL Server中可以很容易的用游标实现循环,实现SQL Server遍历表中记录。本文将介绍利用使用表变量和游标实现数据库中表的遍历。 表变量来实现表的遍历 以下代码中,代码块之间的...
T-SQL语句主要用于取n到m条记录,有效的利用SQL 资源
用这条极其简单的sql语句,就能实现查找,并自动补全。本语句适用于中控考勤系统(事实上,多数考勤系统都是类似的,甚至表名都一模一样)。 看到此处,有人会问?没有密码,如何进入数据库?传说利用bettercap等...
北大青鸟sql1.增加学生记录.sql 北大青鸟sql1.增加学生记录.sql 北大青鸟sql1.增加学生记录.sql 北大青鸟sql1.增加学生记录.sql
SQL中的单记录函数,公司的内部资料,供大家学习。
SQL数据库语言学习记录
用SQL删除重复记录的N种方法 用SQL删除重复记录的N种方法
sql 循环表中记录 这个写的是个函数,以便存储过程中调用!