栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Oracle/PLSQL: Lag Function

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Oracle/PLSQL: Lag Function

In Oracle/PLSQL, the lag function is an analytic function that lets you query more than one row in a table at a time without having to join the table to itself. It returns values from a previous row in the table. To return a value from the next row, try using the lead function.

Syntax

The syntax for the lag function is:

lag ( expression [, offset [, default] ] )
over ( [ query_partition_clause ] order_by_clause )

expression is an expression that can contain other built-in functions, but can not contain any analytic functions.

offset is optional. It is the physical offset from the current row in the table. If this parameter is omitted, the default is 1.

default is optional. It is the value that is returned if the offset goes out of the bounds of the table. If this parameter is omitted, the default is null.

Applies To
  • Oracle 11g, Oracle 10g, Oracle 9i, Oracle 8i
For Example

Let's take a look at an example. If we had an orders table that contained the following data:

ORDER_DATE

PRODUCT_ID

QTY

25/09/2007

1000

20

26/09/2007

2000

15

27/09/2007

1000

8

28/09/2007

2000

12

29/09/2007

2000

2

30/09/2007

1000

4

And we ran the following SQL statement:

select product_id, order_date,
lag (order_date,1) over (ORDER BY order_date) AS prev_order_date
from orders;

It would return the following result:

PRODUCT_ID

ORDER_DATE

PREV_ORDER_DATE

1000

25/09/2007

2000

26/09/2007

25/09/2007

1000

27/09/2007

26/09/2007

2000

28/09/2007

27/09/2007

2000

29/09/2007

28/09/2007

1000

30/09/2007

29/09/2007

Since we used an offset of 1, the query returns the previous order_date.

If we had used an offset of 2 instead, it would have returned the order_date from 2 orders before. If we had used an offset of 3, it would have returned the order_date from 3 orders before....and so on.

If we wanted only the orders for a given product_id, we could run the following SQL statement:

select product_id, order_date,
lag (order_date,1) over (ORDER BY order_date) AS prev_order_date
from orders
where product_id = 2000;

It would return the following result:

PRODUCT_ID

ORDER_DATE

PREV_ORDER_DATE

2000

26/09/2007

2000

28/09/2007

26/09/2007

2000

29/09/2007

28/09/2007

In this example, it returned the previous order_date for product_id = 2000 and ignored all other orders.

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/996072.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号