postgresql - Postgres SELECT 行加上带有条件的下一行
问题描述
我想知道是否有人可以给我一些提示。
我有一个简单的查询,它根据正常标准选择行:
SELECT ntl.id,ntl.transaction_date, amount
FROM nominal_transaction_lines ntl
WHERE ntl.courier_information = 468323802;
我想要得到的不仅是这些行,而且如果下一行有特定的条件,下一行也是。
例如
SELECT ntl.id,ntl.transaction_date, amount
FROM nominal_transaction_lines ntl
WHERE ntl.description = 'fue@'
AND id = (values of id from first select)+1;
最终rowset
将是union
两个结果的结果。
可以这样做cte
吗?
谢谢你的帮助
解决方案
如果您可以接受将要合并到同一行的数据,这可能是一个简单的连接。
SELECT ntl.id, ntl.transaction_date, ntl.amount, ntl_next.id, ntl_next.transaction_date, ntl_next.amount
FROM nominal_transaction_lines ntl
LEFT OUTER JOIN nominal_transaction_lines ntl_next ON ntl_next.id = ntl.id + 1
WHERE ntl.courier_information = 468323802;
如果您需要它们是单独的行,但在同一个结果集中,您可以使用 CTE
WITH base AS (
SELECT ntl.id, ntl.transaction_date, amount
FROM nominal_transaction_lines ntl
WHERE ntl.courier_information = 468323802
)
SELECT b.id, b.transaction_date, b.amount
FROM base b
UNION
SELECT ntl_next.id, ntl_next.transaction_date, ntl_next.amount
FROM base b
INNER JOIN nominal_transaction_lines ntl_next on ntl_next.id = b.id + 1;
如果它满足您的需求,我会推荐第一种方法,因为它更简单。
推荐阅读
- javascript - Firestore:将时间对象转换为时间戳
- security - Solr 安全性:身份验证/授权无法识别
- amazon-web-services - 抱歉,您已达到 Lightsail 实例的最大限制:2
- react-native - 使用 Azure 媒体服务中的令牌播放 Widevine
- google-sheets - Google 表格 - Arrayformula 查询拆分调试
- node.js - POST 请求在 Cpanel 的 NodeJs 应用程序中不起作用
- jboss7.x - jboss 7 域模式下的消息传递 HA 策略
- angular - IdentityServer 提示用户登录
- r - 如何使用 R 中的代码数据帧的信息自动重新编码
- regex - 正则表达式:提取 N 个字符之前的所有完整单词