lag和lead函数的用法

今天刚开通了博客,随便学了点,网上写写。当然刚开始肯定不是写的肯定不是很好的,但是总比不写强点,慢慢的进步么!!!!

主要是lag和lead函数的用法,举两个例子来说明

这两个函数是偏移量函数,可以查出一个字段的上一个值或者下一个值,配合over来使用。

如全表查询select * from tmp_cmu t 结果如下


ITEM_NO          PERIOD              CMU
---------------- ------------ ----------
A01              201001             1000
A01              201002             1200
A01              201003             1190
A01              201004             1600
A01              201005             1980
A01              201006             1890
A01              201007             2100
A01              201008             2320
A01              201009             2540
A01              201010             2490
A01              201011             2610

 

现在首先用lead函数,这个函数是向上偏移,现在对cmu字段进行偏移查询,如下sql语句

select item_no,
       period,lead(cmu, 1) over(partition by item_no,
              substr(period, 1, 4) order by period) as cmup
              from tmp_cmu

 

查询结果为:

ITEM_NO          PERIOD             CMUP
---------------- ------------ ----------
A01              201001             1200
A01              201002             1190
A01              201003             1600
A01              201004             1980
A01              201005             1890
A01              201006             2100
A01              201007             2320
A01              201008             2540
A01              201009             2490
A01              201010             2610
A01              201011             2890

可以看出cmu字段向上偏移了一位,lead(cmu,1)这里的参数是可以修改的,1代表偏移一位。

lag函数是向下偏移一位

select item_no,
       period,lag(cmu, 1) over(partition by item_no,
                      substr(period, 1, 4) order by period) as cmup
                  from tmp_cmu

结果是:

ITEM_NO          PERIOD             CMUP
---------------- ------------ ----------
A01              201001
A01              201002             1000
A01              201003             1200
A01              201004             1190
A01              201005             1600
A01              201006             1980
A01              201007             1890
A01              201008             2100
A01              201009             2320
A01              201010             2540
A01              201011             2490

 

当然我这只是简单的举两个例子,还有更好的用法。等以后慢慢研究

 

转载于:https://www.cnblogs.com/wujin/archive/2012/01/11/2319715.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
lag函数lead函数是窗口函数常用的函数之一,用于在查询结果获取指定列的前一行或后一行的值。它们的具体用法如下: 1. lag函数lag函数用于获取指定列的前一行的值。它的语法如下: ``` lag(column, offset, default) OVER (PARTITION BY partition_column ORDER BY sort_column) ``` - column: 要获取前一行值的列名。 - offset: 指定前面的行数,如果不指定,默认为1。 - default: 指定当没有前一行时的默认值,如果不指定,默认为NULL。 - partition_column: 指定分区列,用于将查询结果划分为多个分区,以便在每个分区内分别计算lag函数。 - sort_column: 指定排序列,用于定义查询结果的顺序。 例如,以下示例使用lag函数获取销售订单表每个订单的前一行订单编号: ```sql SELECT order_id, lag(order_id) OVER (ORDER BY order_date) AS prev_order_id FROM sales_orders; ``` 2. lead函数lead函数用于获取指定列的后一行的值。它的语法与lag函数类似: ``` lead(column, offset, default) OVER (PARTITION BY partition_column ORDER BY sort_column) ``` - column: 要获取后一行值的列名。 - offset: 指定后面的行数,如果不指定,默认为1。 - default: 指定当没有后一行时的默认值,如果不指定,默认为NULL。 - partition_column: 指定分区列。 - sort_column: 指定排序列。 以下示例使用lead函数获取销售订单表每个订单的后一行订单编号: ```sql SELECT order_id, lead(order_id) OVER (ORDER BY order_date) AS next_order_id FROM sales_orders; ``` 使用lag函数lead函数可以方便地对查询结果的前一行或后一行进行引用,帮助进行一些特定的计算和分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值