## Контекст (таблицы и пример данных) ### Таблицы - `ledger(tx_id, account_id, tx_time, amount)` >
SQL Developer
Senior
## Контекст (таблицы и пример данных)
### Таблицы
- `ledger(tx_id, account_id, tx_time, amount)`
> Списание — `amount < 0`.
### Пример данных
**ledger**
| tx_id | account_id | tx_time | amount |
|-----:|-----------:|----------|------:|
| 1 | 1 | 2025-01-01| -10 |
| 2 | 1 | 2025-01-02| -50 |
| 3 | 1 | 2025-01-03| -20 |
---
## Задача
Посчитать суммарное списание по дням и найти дни, где списание — **локальный максимум** (больше, чем на день до и день после).
Вернуть: `day`, `debit_sum`.
Ответы
```sql
WITH daily AS (
SELECT tx_time::date AS day, SUM(-amount) AS debit_sum
FROM ledger
WHERE amount < 0
GROUP BY tx_time::date
), w AS (
SELECT
day,
debit_sum,
LAG(debit_sum) OVER (ORDER BY day) AS prev_sum,
LEAD(debit_sum) OVER (ORDER BY day) AS next_sum
FROM daily
)
SELECT day, debit_sum
FROM w
WHERE (prev_sum IS NULL OR debit_sum > prev_sum)
AND (next_sum IS NULL OR debit_sum > next_sum)
ORDER BY day;
```