найти предыдущее значение на основе условия postgresql - PullRequest
0 голосов
/ 16 мая 2018
id    account   amount  
123     abc      10        
1234    abc      12        
4568    abc      16        
456     def      20        
458     def      30         

Я хочу отфильтровать уникальный идентификатор, чья разница (сумма) меньше 5 (групп по счетам).Здесь ответ выглядит так:

id:
123
1234
4568 

1 Ответ

0 голосов
/ 17 мая 2018

Вы можете комбинировать LEAD и LAG, чтобы получить желаемый результат.

SELECT id
FROM (
    SELECT t.*
        ,amount - LAG(amount, 1, 0) OVER (
            PARTITION BY account ORDER BY amount
            ) AS diff1
        ,amount - LEAD(amount, 1, 0) OVER (
            PARTITION BY account ORDER BY amount
            ) AS diff2
    FROM t
    ) s
WHERE abs(diff1) < 5
    OR abs(diff2) < 5;

Демо

...