MYSQL: выбрать только столбец с суммой == 0

0

У меня есть аналогичная таблица:

+----+--------+--------+------------+-----------+
| 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.

  • 0
    rif_id для идентификатора 1 является нулевым. Нет связи с записями rid_id = 1.
  • 0
    @fancyPants да, но для ID 1 значение rif_id равно 1 .... :)
Показать ещё 2 комментария
Теги:

1 ответ

0

Я думаю, вы можете сделать что-то вроде этого:

  1. получить все записи с тем же ref_id и иметь id < текущую запись
  2. Фильтровать только записи с суммарным значением равно 0. sum(t2.amount) = 0
  3. Сортируйте по id и получите первый. 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
  • 0
    Извините, откуда взялись "t2"?
  • 0
    Это та же таблица. Соединение таблицы с самим собой для расчета накопленного значения и проверки, когда оно становится равным 0.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню