我想知道是否有人可以给我一些提示。
我有一个简单的查询,该查询根据正常条件选择行:
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
来完成吗?
感谢您的帮助
答案 0 :(得分:1)
如果您可以接受将要合并的数据合并到同一行中,那么这可能是简单的联接。
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;
如果能满足您的需求,我会推荐第一种方法,因为它要简单得多。
答案 1 :(得分:0)
我急着问这个问题,但后来解决了。
它可以作为CTE
完成:
WITH
ntl1 AS(
SELECT ntl.id AS thisrow, ntl.id+1 AS nextrow
FROM nominal_transaction_lines ntl
WHERE ntl.courier_information = 468323802),
ntl2 AS(
SELECT ntl.id,amount
FROM nominal_transaction_lines ntl
JOIN ntl1 ON ntl1.thisrow = ntl.id),
ntl3 AS(
SELECT ntl.id,amount
FROM nominal_transaction_lines ntl
JOIN ntl1 ON ntl1.nextrow = ntl.id
WHERE ntl.line_description LIKE 'Fuel%')
SELECT * FROM ntl2
UNION
SELECT * FROM ntl3;
当然,如果有人有更好的主意,我将很高兴听到他们的声音。