假设这
("dateId", "userId")是唯一的并且新行总是有一个更大的(稍后)dateId。
一些评论后:
我认为你需要的是:
SELECt "dateId", "userId", "Salary"FROM ( SELECt "dateId", "userId", "Salary" ,(row_number() OVER (PARTITION BY "userId" -- either this ORDER BY "dateId")) % 2 AS rn FROM user_table WHERe "userId" = 789 -- ... or that ) subWHERe sub.rn = 1AND "Salary" > 0;
请注意PARTITION BY
. 通过这种方式,您可以
dateId为每个跳过每一秒
userId,并且到目前为止,附加的(稍后的)行不会更改选择。
此外,只要您为单个
userId(
WHERe "userId" = 789)选择行,将谓词拉入子查询,即可达到相同的效果(单个用户的稳定选择)。你不需要两者。
该
WHERe子查询中的条款仅适用于单个用户,
PARTITION BY在一个查询适用于任何数量的用户。



