sql 相邻2条记录时间差⽐较
转载地址:wwwzhouhui.iteye/blog/614147
下午看到项⽬有个统计报表的⽣成,其中XX 表中记录相邻2条记录统计时间差 即
表中数据如下:
要求相邻2条记录 如第1条和第2条记录创建时间差统计出来
sql自学难吗即
zhouhui        5秒
dingxiang    24秒
需求出来了需要解决,后来到解决办法了
⽅法 1:
通过分组 统计出⽤户在线时长(即前后2条记录作差)
效果图:
说明 最后⼀个字段我是⽤来统计 ⽤户登录次数使⽤的。
oracle 两个时间相减默认的是天数
oracle 两个时间相减默认的是天数*24 为相差的⼩时数
oracle 两个时间相减默认的是天数*24*60 为相差的分钟数
oracle 两个时间相减默认的是天数*24*60*60 为相差的秒数
⽅法2:
实现效果 ⼀样 这⾥不帖了
Sql 代码
1.
select  t.username,(max ( t.CREATIONDATE)-min (t.CREATIONDATE))*24*60*60,count (t.username)/2  2.
from  ofloginlog t  3.
--where USERNAME = 'zhouhui'  4.  group  by  t.username
Sql 代码
1.
select  username, sum (b), count (username) / 2  2.
from  (select  id, username, (CREATIONDATE - lgtime) * 24 * 60 * 60 as  b  3.
from  (select  t.*,  4.
lag(type) over(partition by  username order  by  CREATIONDATE) lgtype,  5.
lag(CREATIONDATE) over(partition by  username order  by  CREATIONDATE) lgtime  6.
from  ofloginlog t))  7.
-- where USERNAME = 'zhouhui')  8.  group  by  username
⼜复习了⼀下基本的SQL 了 呵呵
20100520 需求有些变更 要求统计个数不是统计TYPE 1 和0 记录之和均值,只统计TYPE=0 的值,
这样SQL 的分组就不能这样了,想了⼀下改进了SQL
查询结果
分析 时间差是2个集合之间的差,⽽后⾯统计个数只是单独限制条件是TYPE=0的记录数,统计的数据
个数就不⼀致,所以很难⼀个分组实现,思路是先实现 USERNAME 和TIME 的记录 在统计USERNAME 和满⾜TYPE=0的记录个数 将2个结果合并 通过  SELECT  XX  FROM
A  B 2个临时表的内联关系实现合并结果集合Sql 代码
1.
select  g.username, g.time , h.count  2.
from  (select  t.username,  3.
floor((max (t.CREATIONDATE) - min (t.CREATIONDATE)) * 24 * 60 * 60) as  time  4.
from  ofloginlog t, ofuser b  5.
where  1 = 1  6.
and  t.username = b.username  7.
group  by  t.username) g,  8.
(select  t.username, count (t.username) as  count  9.
from  ofloginlog t  10.
where  t.type = '0'  11.
group  by  t.username) h  12.
where  g.username = h.username  13.  order  by  count  desc

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。