У меня есть таблица транзакций, который записывает каждую сумму добавляется или вычтен из баланса Клиента, с новым балансом:Получить последнее изменение баланса знака в (My) SQL
+----+------------+------------+--------+---------+
| id | customerId | timestamp | amount | balance |
+----+------------+------------+--------+---------+
| 1 | 1 | 1000000001 | 10 | 10 |
| 2 | 1 | 1000000002 | -20 | -10 |
| 3 | 1 | 1000000003 | -10 | -20 |
| 4 | 2 | 1000000004 | -5 | -5 |
| 5 | 2 | 1000000005 | -5 | -10 |
| 6 | 2 | 1000000006 | 10 | 0 |
| 7 | 3 | 1000000007 | -5 | -5 |
| 8 | 3 | 1000000008 | 10 | 5 |
| 9 | 3 | 1000000009 | 10 | 15 |
| 10 | 4 | 1000000010 | 5 | 5 |
+----+------------+------------+--------+---------+
таблица Клиент сохраняет текущий баланс, и выглядит следующим образом:
+----+---------+
| id | balance |
+----+---------+
| 1 | -20 |
| 2 | 0 |
| 3 | 15 |
| 4 | 5 |
+----+---------+
Я хотел бы добавить balanceSignSince
столбец, который будет хранить метку времени, при котором знак баланса последнего изменения. Переход от положительный, отрицательный, или ноль рассчитывается как изменение баланса.
После обновления, основываясь на приведенных выше данных, таблица Клиента должна содержать:
+----+---------+------------------+
| id | balance | balanceSignSince |
+----+---------+------------------+
| 1 | -20 | 1000000002 |
| 2 | 0 | 1000000006 |
| 3 | 15 | 1000000008 |
| 4 | 5 | 1000000010 |
+----+---------+------------------+
Как я могу написать запрос SQL, который обновляет каждый клиент с моментом последнего знак баланса изменился, основанный на таблицу транзакций?
Я подозреваю, что не могу сделать это без сложной хранимой процедуры, но мне любопытно узнать, появляются ли какие-нибудь умные идеи.
Почему будет ли клиент 1 иметь значение '1000000002', а не' 1000000003'? –
Потому что это когда знак баланса перешел на отрицательный. Следующая сделка не повлияла на знак баланса. – Benjamin
@McNets Это ..? – Benjamin