Проблема при вставке строки базы данных с использованием последней строки в sqlite - PullRequest
0 голосов
/ 12 июля 2020

Я хотел бы иметь возможность делать следующее изначально, а также в любое время.

insert into balance (closing_amount, opening_amount, created, tx_id)

select closing_amount + :value, closing_amount, :date, :tx_id from balance order by id desc limit 1

Обычно я вставляю с использованием предыдущих значений. Но если начальных значений нет, ничего не вставляется.

Я мог бы использовать объединение, которое работает в первый раз, но дублируется при последующих вставках.

Я хочу избежать двух поездок. Есть ли способ сделать это?

Кроме того, tx_id всегда будет уникальным.

1 Ответ

1 голос
/ 12 июля 2020

Я думаю, вам нужно что-то вроде этого:

insert into balance (closing_amount, opening_amount, created, tx_id)
select coalesce(max(closing_amount), 0) + :value, 
       coalesce(max(closing_amount), 0), 
       :date, 
       :tx_id 
from (       
  select closing_amount 
  from balance 
  order by tx_id desc
  limit 1
) t;

Вам нужен только последний closing_amount, поэтому max(closing_amount) из подзапроса, который возвращает 1 строку или вообще ничего, вернет это closing_amount или null соответственно.

См. Упрощенную демонстрацию .

...