假设这("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
) sub
WHERE sub.rn = 1
AND "Salary" > 0;
注意PARTITION BY
. 这样,您每秒跳过dateId
each userId
,并且到目前为止,其他(稍后)行不会更改选择。
此外,只要您为单个 userId
(WHERE "userId" = 789
)选择行,将谓词拉入子查询,达到相同的效果(单个用户的稳定选择)。你不需要两者。
子查询中的WHERE
子句仅适用于单个用户,PARTITION BY
适用于一个查询中的任意数量的用户。
是这样吗?是吗?
他们应该为此给我“侦探”徽章。
严重地。