PostgreSQL lag,lead获取记录前后的数据
场景:获取当前行的下一行某一字段数据,获取当前行的上一行某一字段数据
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)是一样的。
PostgreSQL lag,lead获取记录前后的数据的更多相关文章
- Atitit.并发测试解决方案(2) -----获取随机数据库记录 随机抽取数据 随机排序 原理and实现
Atitit.并发测试解决方案(2) -----获取随机数据库记录 随机抽取数据 随机排序 1. 应用场景 1 2. 随机抽取数据原理 1 3. 常用的实现方法:::数据库随机函数 1 4. Mssq ...
- python插入记录后获取最后一条数据的id
python插入记录后取得主键id的方法(cursor.lastrowid和conn.insert_id()) 参考:https://blog.csdn.net/qq_37788558/article ...
- 【记录】mybatis中获取常量类中数据
部分转载,已注明来源: 1.mybatis中获取常量类中数据 <update id="refuseDebt"> UPDATE dt_debt a SET ...
- thinkphp5 数据库查询之paginate: 同时获取记录总数和分页数据
thinkphp5中要想同时获得查询记录的总数量以及分页的数据, 可以用paginate(), 真的非常方便! 表结构: CREATE TABLE `t_users` ( `id` int(11) u ...
- django获取指定列的数据
django获取指定列的数据 model一般都是有多个属性的,但是很多时候我们又只需要查询特定的某一个,这个时候可以用到values和values_list [values()](https://do ...
- Extjs给gridPanel添加单价双击事件和获取当前行的数据
有两个小属性,如下 this.on('rowdblclick', this.readContent, this); this.on('cellclick', this.gridCellClick, t ...
- jmeter随笔(3)-从csv中获取带引号的数据详情
最近在工作中,对jmeter实践的点滴的记录这里分享,不一定正确,仅供参考和讨论,有想法的欢迎留言.谈论. 1技巧1:从csv中获取带引号的数据详情 背景:我们从csv中获取数据,在jmeter中使用 ...
- ObjectStore onFetch方法获取记录总数
转自:http://blog.csdn.net/earthhour/article/details/38686029 ObjectStore onFetch方法获取记录总数 require(['doj ...
- jmeter csv中获取带引号的数据详情
最近在工作中,对jmeter实践的点滴的记录这里分享,不一定正确,仅供参考和讨论,有想法的欢迎留言.谈论. 1技巧1:从csv中获取带引号的数据详情 背景:我们从csv中获取数据,在jmeter中使用 ...
- ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据
ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...
随机推荐
- 想早点下班?试试Aorm库吧,更方便的进行Go数据库操作
使用go进行项目开发,大多数人会使用gorm,但是gorm有一些缺点,我无法接受.于是开发出了aorm,目前能有满足日常开发需求,并且完善了使用文档,希望能够帮助到大家. Aorm Golang操作数 ...
- 像go 一样 打造.NET 单文件应用程序的编译器项目bflat 发布 7.0版本
现代.NET和C#在低级/系统程序以及与C/C++/Rust等互操作方面的能力完全令各位刮目相看了,有人用C#开发的64位操作系统: GitHub - nifanfa/MOOS: C# x64 ope ...
- nuxt.js中引入lib-flexible 和 postcss-px2rem 实现pc自适应
最近一个需要用nuxt框架实现的pc自适应项目,从网上找了很多资料,最终完美实现 一.下载相关插件 npm i lib-flexible -Snpm i px2rem-loader -Dnpm ins ...
- Ubuntu:Docker 容器操作
创建容器 1.docker run [option] 镜像名 [向启动容器中传入的命令] 常用可选说明 -i 表示以"交互模式"运行容器 -t 表示容器启动后会进入其命令行.加入这 ...
- java反射基础知识整理
目录 1.反射机制的作用 2.获取一个类的实例 3.使用Class.forName()方法加载类的静态代码块 4.获取配置文件的路径 5.java反编译 5.1.获取类中的成员变量 5.2.通过类名反 ...
- JVM面试大总结
一.汇总 JVM是运行在操作系统之上的,它与硬件没有直接的交互.先说一下JVM的内存区域,当函数开始运行时,JVM拿到自己的内存将自己的内存区域进行了分割,分为五块区域:线程共享的有堆.方法区,线程私 ...
- flutter系列之:flutter中listview的高级用法
目录 简介 ListView的常规用法 创建不同类型的items 总结 简介 一般情况下,我们使用Listview的方式是构建要展示的item,然后将这些item传入ListView的构造函数即可,通 ...
- Ynoi 数据结构题选做
Ynoi 数据结构题选做 前言 我将成为数据结构之神!坚持 lxl 党的领导,紧随 nzhtl1477(女装灰太狼1477)的脚步.无论过去.现在还是未来,分块始终是实现 data structure ...
- 使用 GPG 签名提交
GPG 签名是对代码提交者进行身份验证的一种补充,即证明代码提交来密钥持有者,理论上可以确保在目前的破译技术水平下无法篡改内容.您可以使用 GPG 工具 (GNU Privacy Guard) 生成密 ...
- 第一次Kaggle比赛心得
新手避雷 在未组队的情况下私下共享资料属于违规行为,组队截止时间过后尤其不能这样 提交notebook的时候,kaggle的服务器只能找到前两个输出文件,所以一定要把你要提交的文件放在前两个(我们就是 ...