首页 > 解决方案 > 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吗?

谢谢你的帮助

标签: postgresqlcommon-table-expression

解决方案


如果您可以接受将要合并到同一行的数据,这可能是一个简单的连接。

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;

如果它满足您的需求,我会推荐第一种方法,因为它更简单。


推荐阅读