场景:获取当前行的下一行某一字段数据,获取当前行的上一行某一字段数据

1、测试数据:

postgres=# select * from tb1;

id | name

----+------

1 | aa

2 | aa

3 | aa

4 | aa

5 | aa

| bb

| cc

(7 rows)

2. lag(value any [, offset integer [, default any ]]):获取往前偏移offset的那行的某一字段的数据

参数值

说明

value any

指定某一字段

offset integer

向上的偏移量

default any

如果前后的行不存在,则填充的默认值

获取上一行的id值,不指定默认值

postgres=# select *,lag(id,1) over(order by
id) from tb1;

id |
name | lead

----+------+------

1 |
aa   |      --第一行的上一行没有值,就用null填充

2 |
aa   |   
1

3 |
aa   |   
2

4 |
aa   |   
3

5 |
aa   |   
4

|
bb   |   
5

|
cc   |

(7 rows)

  • 获取上一行的id值,指定默认值

postgres=# select *,lag(id,1,100) over(order
by id) from tb1;

id |
name | lag

----+------+-----

1 |
aa   | 100  --第一行的上一行没有值,就用指定的默认值100填充

2 |
aa   |  
1

3 |
aa   |  
2

4 |
aa   |  
3

5 |
aa   |  
4

|
bb   |  
5

|
cc   |

(7 rows)

  • 偏移两行

postgres=# select *,lag(id,2,100) over(order
by id) from tb1;

id |
name | lag

----+------+-----

1 |
aa   | 100

2 |
aa   | 100

3 |
aa   |  
1

4 |
aa   |  
2

5 |
aa   |  
3

|
bb   |  
4

|
cc   |  
5

(7 rows)

-偏移量为-1

postgres=# select *,lag(id,-1,100) over(order
by id) from tb1;

id |
name | lag

----+------+-----

1 |
aa   |  
2

2 |
aa   |  
3

3 |
aa   |  
4

4 |
aa   |  
5

5 |
aa   |

|
bb   |

|
cc   | 100

(7 rows)

当偏移量为负数的时候,就是取下面行的指定字段的值了。

3. lead(value any
[, offset integer [, default any ]]):获取往后偏移offset的那行的某一字段的数据

  • 向下偏移一行

postgres=# select *,lead(id,1,100) over(order
by id) from tb1;

id |
name | lead

----+------+------

1 |
aa   |   
2

2 |
aa   |    3

3 |
aa   |   
4

4 |
aa   |   
5

5 |
aa   |

|
bb   |

|
cc   | 
100

(7 rows)

可以看到,lag(id, 1) 和 lead(id, -1)是一样的。

最新文章

  1. [原]Paste.deploy 与 WSGI, keystone 小记
  2. Android Service
  3. ASCII和16进制对照表
  4. MonoGame 3.2 下,截屏与 Texture2D 的保存
  5. DOM--4 响应用户操作和事件(1)
  6. c#组元(Tuple)的使用
  7. 优秀的web前端工程师要具备什么
  8. 转:设置session过期时间
  9. OpenStack Magnum 项目简单介绍
  10. netbeans git 配置(ssh方式)
  11. JavaScript高级程序设计53.pdf
  12. HTTP请求大全
  13. Swift语言指南(五)--数字字面量和数字类型转换
  14. servlet之隐藏域
  15. 关于Podfile,某个第三方指定源
  16. sping框架纯注解配置
  17. 如何解决海量数据的Top K问题
  18. memcached全面剖析--2.理解memcached的内存存储
  19. .net core session cookie操作
  20. hdu-1695 GCD---容斥定理

热门文章

  1. 盘点JAVA中基于CAS实现的原子类, 你知道哪些?
  2. Nmap安装
  3. Redis的数据复制
  4. 时间老去,Ruby不死,Ruby语言基础入门教程之Ruby3全平台开发环境搭建EP00
  5. 教你用JavaScript实现乘法游戏
  6. sqlSession封装以及CRUD的实现
  7. 《STL源码剖析》STL的双层配置器
  8. Luogu P6394 樱花,还有你题解
  9. 视图,触发器,存储过程,流程控制等MySQL小知识点
  10. c++代码实现中时间复杂度的不断优化