sql - Oracle SQL - 使用 LAG 或 LEAD 将多行结果返回到一行
问题描述
我试图弄清楚如何为多行结果返回 1 行。
目前我的代码如下所示:
select x.Reference,
x.date "Date1",
x.char "Char1",
lead(x.date, 1) OVER (PARTITION BY x.Reference ORDER BY x.date) as "Date2",
lead(x.char, 1) OVER (PARTITION BY x.Reference ORDER BY x.date) as "Char2",
lead(x.date, 2) OVER (PARTITION BY x.Reference ORDER BY x.date) as "Date3",
lead(x.char, 2) OVER (PARTITION BY x.Reference ORDER BY x.date) as "Char3"
from tbl x
该表对每个 x.Reference 都有多个条目。对于每个 x.Reference 的第一行,该行返回所需的结果。但是,正如预期的那样,它会继续为找到的每个 x.reference 输出一行。我试图找到一种方法来限制这些额外行的输出,因为第一行已经有我需要的数据。
提前致谢。
解决方案
好吧,您可以使用row_number()
:
with x as (
select x.Reference, x.date as "Date1", x.char as "Char1",
lead(x.date, 1) OVER (PARTITION BY x.Reference ORDER BY x.date) as "Date2",
lead(x.char, 1) OVER (PARTITION BY x.Reference ORDER BY x.date) as "Char2",
lead(x.date, 2) OVER (PARTITION BY x.Reference ORDER BY x.date) as "Date3",
lead(x.char, 2) OVER (PARTITION BY x.Reference ORDER BY x.date) as "Char3",
row_number() over (partition by x.Reference order by x.date) as seqnum
from tbl x
)
select x.*
from x
where seqnum = 1;
推荐阅读
- java - 在 Spark 2.2.0 中设置 DEFAULT_MAX_TO_STRING_FIELDS
- apache - 尝试安装 ssl 证书后,我可以访问我的网站
- node.js - 命令行(@angular/cli)未安装在 Angular 6 中
- python - 使用循环遍历范围以每次选择一个值
- javascript - 当 foreach 完成时,Jquery 执行下一个功能
- python - 在 QTableView 中使用 QSortFilterProxyModel 过滤结果
- botframework - 使用 sourceEvent 在 bot 框架模拟器中显示按钮
- fullcalendar - fullcalendar:将图像放置在所有日子单元格的中心
- c# - 尝试使用 Windows.System.UserProfile 时,“类型转发到程序集 'Windows 版本 = 255.255.255.255'”
- objective-c - 如何在具有参数的objective-C中实现快速委托方法?