sql - sql oracle如何同时获取前10行和后10行
问题描述
我想写一个 oracle sql 查询我有这样的数据表:
Table A
no ID Time
1 A001 9/27/2021 3:22:42 PM
2 A002 9/27/2021 3:25:58 PM
3 A003 9/27/2021 2:40:48 PM
4 A004 9/27/2021 2:40:44 PM
5 A005 9/27/2021 2:40:46 PM
6 A006 9/27/2021 2:40:51 PM
........................................
1000 A1000 9/27/2021 2:44:38 PM
1001 A1001 9/27/2021 2:44:47 PM
1002 A1002 9/27/2021 2:44:36 PM
1003 A1003 9/27/2021 2:44:40 PM
1004 A1004 9/27/2021 2:44:43 PM
1005 A1005 9/27/2021 2:43:57 PM
............................................
A99999999999................................
还有 1 个这样的表:
Table B
No ID Time
1 A03 9/27/2021 2:40:51 PM
2 A05 9/27/2021 2:44:36 PM
............................................
A999........................................
知道表 B 肯定在表 A 中。对于表 B 中的每一行,我们如何从表 A 上获取 10 行和下 10 行?目前我只使用 rank()、lag()、lead(),然后将 2 个表连接在一起,但还没有想要的结果
解决方案
WITH JOINED_TABLES AS (
SELECT "A".*, B."no" AS B_no
, ROW_NUMBER() OVER (ORDER BY "A"."Time") AS RN
FROM "A"
LEFT JOIN B ON "A"."ID"=B."ID"
)
, CENTRE_RNS AS (
SELECT RN FROM JOINED_TABLES WHERE B_no IS NOT NULL
)
SELECT J."no", J."ID", J."Time", C.RN FROM JOINED_TABLES J
LEFT JOIN CENTRE_RNS C ON J.RN BETWEEN C.RN-1 AND C.RN+1
ORDER BY "no"
您可以将倒数第二行编辑为 -10 和 +10
推荐阅读
- swift - 如何仅从本地库中获取照片,未经 iCloud 优化
- c++ - 没有 template<> 的 C++ 模板特化
- ios - 我怎么知道我是否已经滚动过了 ScrollView 的某个子项?
- gcc - GCC 错误:架构 x86_64 的未定义符号
- amazon-web-services - 服务角色 EMR_DefaultRole 的 EC2 权限不足
- python - 如果名称列的长度 <=1,则删除数据框中的行
- java - Java通过拖动到jtable读取excel
- javascript - 使用vue axios和PHP上传多个文件——只上传一个文件
- android - 无法找到在酱实验室实时设备中运行我的代码的方法
- c# - 领域数据库是否支持 Blazor Web 程序集?