Предполагая, что ("dateId", "userId")
уникально и новые строки всегда имеют больший (позже) dateId
.
После некоторых комментариев:
Что я думаю тебе нужно:
SELECT "dateId", "userId", "Salary"
FROM (
SELECT "dateId", "userId", "Salary"
,(row_number() OVER (<b>PARTITION BY "userId"</b> -- either this
ORDER BY "dateId")) % 2 AS rn
FROM user_table
<b>WHERE "userId" = 789</b> -- ... or that
) sub
WHERE sub.rn = 1
AND "Salary" > 0;
Обратите внимание на PARTITION BY
. Таким образом, вы пропускаете каждую секунду dateId
для каждого userId
, и дополнительные (более поздние) строки пока не изменяют выбор.
Кроме того, пока вы выбираете строки для одного userId
(WHERE "userId" = 789
), перетяните предикат в подзапрос, добившись того же эффекта (стабильный выбор для одного пользователя). Вам не нужны оба.
Предложение WHERE
в подзапросе работает только для одного пользователя, PARTITION BY
работает для любого количества пользователей в одном запросе.
Это так? Это так?
Они должны дать мне «детективный» значок за это.
Серьезно.