Есть таблица транзакций:
CREATE TABLE transactions (
id int PRIMARY KEY,
user_id int,
ts timestamp,
amount int
);
Нужно найти пользователей, у которых баланс ни разу не становился отрицательным.
Начальный баланс — 0.
Но есть важное условие:
все операции с одинаковым ts происходят одновременно, поэтому порядок строк внутри одного timestamp учитывать нельзя.
Пример:
10:00 +100
11:00 -80
11:00 -30
11:00 +20
12:00 +50
В 11:00 изменение баланса должно считаться как:
-80 - 30 + 20 = -90
То есть баланс:
10:00 → 100
11:00 → 10
12:00 → 60
Наивный вариант:
SUM(amount) OVER (
PARTITION BY user_id
ORDER BY ts
)
может дать неправильную логику, если считать операции с одинаковым ts по отдельности.
Задача: написать SQL-запрос, который сначала объединит операции одного пользователя с одинаковым timestamp, а затем проверит минимальный накопительный баланс.