oracle lead()函数

 

ead()是一个分析函数,适用于oracle 8i以后的版本,

使用这个函数,你可以一次性从表中查询多条记录,

而不需要进行表的自连接。

返回值:返回与当前行偏离offset行的列值。

语法:

      lead ( expression [, offset [, default] ] )

      over ( [ query_partition_clause ] order_by_clause )

expression :可以包含除了分析函数意外的任何oracle内置函数。

offset :可选项,表里偏移当前行的值,默认值为1。

default :可选项,如果offset值超出了当前表范围,就返回此值,默认值为null.

下面是一个实例:

1. with orders as( select to_date('25-09-2007','dd-mm-yyyy') order_date,1000 product_id,20 qty from dual union all select to_date('26-09-2007','dd-mm-yyyy'),2000,15 from dual union all select to_date('27-09-2007','dd-mm-yyyy'),1000,8 from dual union all select to_date('28-09-2007','dd-mm-yyyy'),2000,12 from dual union all select to_date('29-09-2007','dd-mm-yyyy'),2000,2 from dual union all select to_date('30-09-2007','dd-mm-yyyy'),1000,4 from dual) select product_id,order_date, lead(order_date,1) over (order by order_date) next_order_date from orders; PRODUCT_ID ORDER_DATE NEXT_ORDER_DATE ---------- ----------- --------------- 1000 2007-9-25 2007-9-26 2000 2007-9-26 2007-9-27 1000 2007-9-27 2007-9-28 2000 2007-9-28 2007-9-29 2000 2007-9-29 2007-9-30 1000 2007-9-30 -- 因为offset值为1,所以查询出了下一个order_date 如果我们将offset设为2,那么会查询出往下第二个order_date, 如果offset为3呢,将会查询出往下第三个order_date, ...... 2.使用上面的数据。 select product_id,order_date, lead(sum(qty),1,0) over (order by order_date) sum_next_qty from orders group by product_id,order_date; PRODUCT_ID ORDER_DATE SUM_NEXT_QTY ---------- ----------- ------------ 1000 2007-9-25 8 1000 2007-9-27 4 1000 2007-9-30 15 2000 2007-9-26 12 2000 2007-9-28 2 2000 2007-9-29 0 我们先按product_id分组,再按order_date分组 

原文:http://www.techonthenet.com/oracle/functions/lead.php

 

你可能感兴趣的:(oracle,Date,query)