`
wwwzhouhui
  • 浏览: 361109 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

sql 相邻2条记录时间差比较

    博客分类:
  • sql
阅读更多

  下午看到项目有个统计报表的生成,其中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
分享到:
评论

相关推荐

    Mysql 相邻两行记录某列的差值方法

    本文将详细讲解如何在MySQL中找到相邻两行记录某列的差值,以及涉及的相关SQL方法。 首先,我们来看表`sys_touch_info`的结构,它包含`company_id`和`touch_time`等字段。表中的数据可能如下: ```sql company_id ...

    oracle查询相邻上下行值

    在处理时间序列数据或具有某种排序的数据时,经常需要查询某一行记录与其相邻行(前一行或后一行)的数据。这种需求在财务分析、时间序列分析等领域非常常见。例如,在股票交易中,可能需要查询某一天的价格以及前一...

    sql高级进阶

    - 查找同一组或分区中行之间的差:计算组内相邻行的时间差。 - 定位连续值范围的开始点和结束点:确定连续值序列的边界。 - 合并时间段:合并有重叠或相连的时间段。 10. 高级查找 - 给结果集分页:使用ROW_...

    2表数据统计

    在SQL中,我们可以使用窗口函数ROW_NUMBER()配合PARTITION BY来实现,先为每个评卷员的记录分配一个序号,然后计算相邻记录的时间差。 4. **累加时间差**:将每个评卷员的所有时间差累加起来,得到该评卷员的总评卷...

    hive窗口函数

    #### 二、窗口函数应用场景 ##### 1. 分区排序 窗口函数可以基于分区内的记录进行排序,从而实现对特定分区内数据的聚合操作,比如计算每个用户每天的累计访问量。 ##### 2. 动态Group By 窗口函数可以实现动态的...

    SQL计算timestamp的差值的方法

    如果需要计算每个记录相对于序列中的其他记录的时间差,可以使用窗口函数,如`LAG()`或`LEAD()`,但这通常不涉及timestamp的直接差值计算,而是用于获取相邻行的timestamp值。 8. **时间区间计算**: 在查找某个...

    尚硅谷大数据技术之Hive-04(面试题)1

    这需要利用自连接和时间差计算。首先,可以创建一个新的表,包含每个用户访问记录的前一条记录,然后通过计算两行之间的差值来判断是否属于同一组。如果差值小于60秒,则分配相同的分组编号,否则分配新的分组编号。...

    pandas or sql计算前后两行数据间的增值方法

    在数据分析和数据库管理中,有时候我们需要计算数据序列中相邻元素之间的差异,这通常被称为差分。在本例中,我们探讨了如何使用Python的Pandas库和SQL来计算前后两行数据间的增值(即差分)。这两种方法对于处理...

    Oracle时间区间段合并.pdf

    在内部查询中,根据`ID`和累积的`F`值进行分组,计算每个分组的最大结束时间和最小开始时间之差,再乘以24,得到每个分组的总小时数。 4. 最外层的`GROUP BY`: 最后,对`ID`进行再次分组,将所有属于同一`ID`的...

    ArcEngine二次开发 地图中的查询统计

    2. 表格显示:生成包含查询结果的表格,方便查看和比较。 3. 统计图表:使用柱状图、饼图、热力图等形式直观呈现统计结果。 4. 动态图:通过动画展示随时间变化的统计信息。 五、高级功能 ArcEngine还支持更复杂的...

    海洋观测浮标数据清洗软件

    - **时间序列分析**:通过比较相邻时间点的数据变化,识别突然的异常波动。 - **统计分析**:利用平均值、标准差等统计量,识别显著偏离正常范围的异常值。 3. **数据标记**:对于识别出的问题数据,软件会以不同...

    冒泡选择插入快速排序的效率演示代码

    通过生成随机数并记录排序前后的时间差来评估每种排序算法的执行效率。 ```java import java.sql.Timestamp; import java.util.Arrays; import java.util.Random; public class Sort { static int NUM = 100000; ...

    2021-2022计算机二级等级考试试题及答案No.1258.docx

    - **知识点**:冒泡排序是一种简单的交换排序算法,它重复地遍历待排序列表,比较每对相邻项,并将顺序错误的元素进行交换。冒泡排序的时间复杂度较高,在实际应用中不如快速排序、选择排序等其他算法高效。 ### 6....

    HCIA第一课,第二课笔记

    ### HCIA第一、二课知识点总结 #### 一、OSI七层模型及各层功能 **1. 应用层** - 功能:提供应用程序之间的接口,支持用户应用程序和服务之间的交互。 - 示例:HTTP、FTP、SMTP。 **2. 表示层** - 功能:处理数据...

    Oracle常见函数集锦

    - `MONTHS_BETWEEN()`:计算两个日期之间的月数差。 - `TO_CHAR()` 和 `TO_DATE()`:将日期转换为字符串或将字符串转换为日期。 4. **条件判断函数** - `IFNULL()` 或 `NVL()`:如果表达式结果为NULL,则返回...

    phpweb文章上一篇下一篇

    通常会设置一个条件,如时间差不超过一天或ID相差一,确保找到的是相邻的文章。 3. 模板引擎: - PHPWeb可能使用了某种模板引擎(如Smarty、Twig等),这些引擎允许开发者将业务逻辑与视图分离,使代码更易于维护...

    阿里巴巴-数据分析笔试题以及相关问题.pdf

    - **解析**: 观察给出的数列,可以发现相邻两项之差依次为57、32、15、12、3。由此推断,数列的规律可能是相邻两项之差逐渐减小,下一个差值为0或1。因此,括号中的数字应该是24+1=**B. 25**。 **6. 数据分布类型**...

    Oracle 9i 分析函数参考手册

    10. STDDEV, STDDEV_POP, STDDEV_SAMP, VAR_POP, VAR_SAMP, VARIANCE:这些都是统计函数,用于计算标准差、方差等,以了解数据的分散程度。 分析函数的关键在于 `OVER` 子句,它可以定义“窗口”或“框架”,在这个...

    程序员试卷1997年

    - **交换排序**(选项③)是一种常见的排序方法,通过比较相邻元素并交换位置来进行排序,如冒泡排序。 - **选择排序**(选项⑥)是一种简单直观的比较排序算法。它的工作原理是遍历列表,找到最小(或最大)的元素...

Global site tag (gtag.js) - Google Analytics