Oracle - 连续获取第一行

Ale*_*ani 1 sql oracle select

我想提取所有"A"状态的行,以及"A"状态后每个帐户的第一行.例如:

id   account   status
 1      X         A
 2      Y         C
 3      Y         A
 4      X         B
 5      X         C
 6      Y         C
 7      X         A
 8      X         C
 9      X         C
 ...
Run Code Online (Sandbox Code Playgroud)

预期的产出是

 1      X         A
 3      Y         A
 4      X         B
 6      Y         C
 7      X         A
 8      X         C
 ...
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

Mur*_*nik 5

您可以使用该lag功能"回顾"上一行.遗憾的是,您无法在where子句中使用窗口函数,因此您必须使用子查询:

SELECT id, account, status
FROM   (SELECT id, account, status,
               LAG(status) OVER (PARTITION BY account ORDER BY id ASC) AS prev_status
        FROM   mytable) t
WHERE  'A' IN (status, prev_status)
Run Code Online (Sandbox Code Playgroud)