У меня есть аналогичная таблица:
+----+--------+--------+------------+-----------+
| id | amount | rif_id | date | is_closed |
+----+--------+--------+------------+-----------+
| 1 | 20 | NULL | 2017-11-12 | 1 |
| 2 | -5 | 1 | 2017-11-13 | NULL |
| 3 | -10 | 1 | 2017-11-24 | NULL |
| 4 | 7 | NULL | 2017-11-25 | 0 |
| 5 | -5 | 1 | 2017-11-26 | NULL |
| 6 | -5 | 4 | 2017-11-28 | NULL |
| 7 | 11.20 | NULL | 2017-11-30 | 0 |
+----+--------+--------+------------+-----------+
Мне нужно получить список более поздних идентификаторов, в которых сумма SUM равна нулю, ссылаясь на rif_id.
В моем примере мне нужно получить этот результат:
+----+--------+--------+------------+-----------+
| id | amount | rif_id | date | is_closed |
+----+--------+--------+------------+-----------+
| 5 | -5 | 1 | 2017-11-26 | NULL |
+----+--------+--------+------------+-----------+
Мне нужен ID 5, потому что сумма -5 с суммой ID 1, 2 и 3 равна нулю.
FYI, столбец "is_closed" обновляется с помощью 1 при вставке последней транзакции внутри таблицы. По сути, когда вставлен ID 5, мой скрипт вычисляет и обновляет идентификатор 1 с помощью "is_closed" 1. Не знаю, может ли быть важным для SQL SELECT create.
Я думаю, вы можете сделать что-то вроде этого:
ref_id
и иметь id <
текущую записьsum(t2.amount) = 0
Order by id desc Limit 1
Select
t1.id,
t1.amount,
t1.rif_id,
t1.date,
t1.is_closed
From
table t1
left join table t2 on t2.ref_id = t1.ref_id and t2.id < t1.id
Group by
t1.id,
t1.amount,
t1.rif_id,
t1.date,
t1.is_closed
Having
sum(t2.amount) = 0
Order by
id desc
Limit 1