我想提取所有"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)
我该怎么办?
您可以使用该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)