`

lag over 函数

阅读更多
with ta as
(select '723488' as emp_code,
         to_date('2017/7/3 14:00', 'yyyy/mm/dd hh24:mi') as start_time,
         to_date('2017/7/3 15:30', 'yyyy/mm/dd hh24:mi') as end_time
    from dual
  union all
  select '723488' as emp_code,
         to_date('2017/7/3 16:00', 'yyyy/mm/dd hh24:mi') as start_time,
         to_date('2017/7/3 17:00', 'yyyy/mm/dd hh24:mi') as end_time
    from dual
  union all
  select '723488' as emp_code,
         to_date('2017/7/3 16:00', 'yyyy/mm/dd hh24:mi') as start_time,
         to_date('2017/7/3 17:30', 'yyyy/mm/dd hh24:mi') as end_time
    from dual
  union all
  select '723488' as emp_code,
         to_date('2017/7/3 16:30', 'yyyy/mm/dd hh24:mi') as start_time,
         to_date('2017/7/3 18:00', 'yyyy/mm/dd hh24:mi') as end_time
    from dual
  union all
  select '723488' as emp_code,
         to_date('2017/7/3 17:00', 'yyyy/mm/dd hh24:mi') as start_time,
         to_date('2017/7/3 18:00', 'yyyy/mm/dd hh24:mi') as end_time
    from dual
  union all
  select '723488' as emp_code,
         to_date('2017/7/3 17:10', 'yyyy/mm/dd hh24:mi') as start_time,
         to_date('2017/7/3 18:30', 'yyyy/mm/dd hh24:mi') as end_time
    from dual
 
  ),
  tb as (
select emp_code, nvl(lag(end_time)over(partition by emp_code order by start_time, end_time), start_time) as last_end_time, start_time, end_time
from ta
)
select tb.*, (end_time - case when last_end_time > start_time then last_end_time else start_time end) * 24
from tb

Hive版本
set mapred.job.queue.name=root.dw ;
with ta as
(select '723488' as emp_code,
         '2017-7-3 14:00:00' as start_time,
         '2017-7-3 15:30:00' as end_time
  union all
  select '723488' as emp_code,
         '2017-7-3 16:00:00' as start_time,
         '2017-7-3 17:00:00' as end_time
  union all
  select '723488' as emp_code,
         '2017-7-3 16:00:00' as start_time,
         '2017-7-3 17:30:00' as end_time
  union all
  select '723488' as emp_code,
         '2017-7-3 16:30:00' as start_time,
         '2017-7-3 18:00:00' as end_time
  union all
  select '723488' as emp_code,
         '2017-7-3 17:00:00' as start_time,
         '2017-7-3 18:00:00' as end_time
  union all
  select '723488' as emp_code,
         '2017-7-3 17:10:00' as start_time,
         '2017-7-3 18:30:00' as end_time
  ),
  tb as (
select emp_code, nvl(lag(end_time)over(partition by emp_code order by start_time, end_time), start_time) as last_end_time, start_time, end_time
from ta
),
tc as(
select emp_code,  case when last_end_time > start_time then last_end_time else start_time end as start_time, end_time
from tb
)
select emp_code,start_time,end_time,  datediff(to_date(end_time) , to_date(start_time) ) * 24 + hour(end_time) - hour(start_time) + (minute(end_time) - minute(start_time)) / 60
from tc
分享到:
评论

相关推荐

    Oracle开发的over函数

    ### Oracle开发中的OVER函数详解 #### 一、Oracle分析函数简介 在Oracle数据库开发中,分析函数是一类非常强大的工具,主要用于实现复杂的查询需求,尤其是在处理大量数据时,能够提供高级的数据汇总、排序和筛选...

    ORACLE_OVER函数

    在Oracle数据库中,OVER函数是用于实现窗口函数(Window Functions)的重要组成部分。窗口函数允许我们执行更复杂的数据分析操作,如计算累计总和、排名等。这在开发报表时非常有用,能够让我们在查询结果中直接进行...

    oracle分析函数over_及开窗函数.txt

    本文将详细介绍Oracle中的`OVER`子句以及几种常用的开窗函数,包括`ROW_NUMBER()`, `RANK()`, `DENSE_RANK()`和`LAG()`等。 #### 二、基本概念 - **`OVER`子句**:`OVER`子句用于指定分析函数的作用范围,它可以...

    Gbase 8s内置函数之窗口函数

    5. LAG() 函数和 LEAD() 函数:LAG() 函数可以获取某个窗口范围内的前一个值,LEAD() 函数可以获取某个窗口范围内的后一个值,例如,计算某个季度的销售额的变化情况: ```sql SELECT f_month, f_quarter, f_...

    oracle函数介绍(6) 著名函数之分析函数.doc

    在本篇中,我们将深入探讨几个关键的分析函数,包括AVG、SUM、COUNT、FIRST_VALUE、LAST_VALUE、LAG和LEAD。 1. AVG([DISTINCT|ALL] expr) OVER(analytic_clause) AVG函数用于计算平均值,分为聚合函数和分析函数...

    Oracle查询中OVER (PARTITION BY ..)用法

    Oracle查询中的`OVER (PARTITION BY ..)`是一个窗口函数,它允许我们在数据集上执行计算,但不是在整个结果集上,而是针对每个分区。这部分功能非常强大,可以用于复杂的分析和排序任务,尤其是在处理分组数据时。在...

    oracle求同比,环比函数(LAG与LEAD)的详解

    在示例中,`LAG(SALARY, 1, 0) OVER(PARTITION BY EMPLOYEENO ORDER BY YEARMONTH)` 就是使用LAG函数获取每名员工上一个月的工资,如果不存在上一个月的数据,则返回0。 2. LEAD函数: LEAD函数与LAG相反,它用于...

    oracle分析函数及开窗函数

    2. **偏移量函数**:如`LAG()`, `LEAD()`等,用于访问当前行之前的或之后的行的数据。 3. **聚合函数**:如`SUM()`, `AVG()`, `MIN()`, `MAX()`等,这些函数可以对一组值执行聚合操作,并将结果应用于每个组中的每一...

    oracle开窗函数学习技巧总结

    4. **偏移量函数**:例如`LAG()`和`LEAD()`,用于访问前一行或后一行的数据。 #### 四、具体示例解析 ##### 示例1:计算每个班级的最高分 ```sql SELECT name, class, s, RANK() OVER (PARTITION BY class ORDER ...

    ORACLE分析函数教程

    4. **前导(Lag)/后置(Lead)函数**:允许在结果集中向前或向后检索值,常用于获取前一行或后一行的数据。 ```sql -- 示例:获取当前行之前一行的薪水 SELECT employee_id, salary, LAG(salary) OVER (ORDER BY ...

    oracle分析函数,窗口函数,报表函数

    窗口函数包括`LAG()`, `LEAD()`, `SUM() OVER`, `AVG() OVER`等,它们在窗口内进行聚合操作。 ### 5. 报表函数 报表函数主要涉及对数据的汇总和聚合,如`COUNT()`, `SUM()`, `AVG()`, `MAX()`, `MIN()`等。这些...

    Oracle分析函数

    LAG 函数用于访问之前的行。 3.10 LAST_VALUE 函数 LAST_VALUE 函数用于获取一个组的最后一个值。 3.11 LEAD 函数 LEAD 函数用于访问之后的行。 3.12 MAX 函数 MAX 函数用于计算表达式的最大值。 3.13 MIN ...

    oracle lag 实现同一字段的前N行的数据和后N行的值

    根据提供的文件信息,本文将详细解释如何在Oracle数据库中使用`LAG`函数来获取同一字段的前N行数据,以及如何使用`LEAD`函数获取后N行的值。 ### Oracle LAG 和 LEAD 函数简介 #### 1. LAG 函数 `LAG`函数是Oracle...

    hive窗口函数.docx

    1. 使用 over() 函数进行数据统计,统计每个用户及表中数据的总数 ```sql select *, count(userid) over() as total from test_window; ``` 2. 求用户明细并统计每天的用户总数 ```sql select *, count() over...

    Oracle中的分析函数详解

    Oracle数据库系统是世界上最...在实际工作中,结合PARTITION BY和OVER子句的使用,分析函数可以解决许多复杂的业务问题,提升数据处理能力。因此,对分析函数的深入理解是成为高级Oracle数据库开发人员的关键技能之一。

    Ooracle 分析函数的使用实例

    本文将通过具体示例,深入探讨Oracle分析函数的几个关键应用,包括:汇总函数ROLLUP和CUBE、排名函数RANK和DENSE_RANK、LAG和LEAD函数、SUM和AVG的移动计算、RATIO_TO_REPORT报表处理函数以及FIRST和LAST取基数函数...

    ORACLE分析函数

    本文将深入探讨其中几个关键的分析函数,包括`RANK()`,`ROW_NUMBER()`以及`LAG()`,并结合`OVER()`子句的使用进行详尽的解释。 首先,`ROW_NUMBER()`函数用于为数据集中的每一行分配一个唯一的整数。这在需要对...

    Oracle_详解分析函数

    - **窗口函数进阶-比较相邻记录**:使用`LAG`或`LEAD`函数比较当前行与其前后行的值。 **例:** ```sql SELECT empno, ename, sal, LAG(sal) OVER (ORDER BY empno) AS prev_sal FROM employees; ``` #### ...

    分析函数详细解析

    在这个例子中,`ORDER BY T.ZQ_ID` 确保了 `LAG()` 函数能正确获取前一行的销售数据。 **3.2.4 WINDOWING子句** `ROWS BETWEEN` 或 `RANGE BETWEEN` 子句用于定义窗口的范围。例如,`ROWS BETWEEN UNBOUNDED ...

    oracle 常用函数下载

    1. **开窗函数(Over)**: 开窗函数允许在一组行上执行计算,这组行被称为“窗口”,窗口可以基于特定的排序或分区条件。例如: - `OVER (ORDER BY salary)` 按薪资排序进行累计。 - `OVER (PARTITION BY deptno)`...

Global site tag (gtag.js) - Google Analytics