Нужно подвести итоги в базе данных Sqlite - PullRequest
1 голос
/ 01 марта 2011

У меня есть база данных Sqlite с таблицей, содержащей финансовые транзакции.Подходящими столбцами являются дата, номер заказа и суммы дебетовых и кредитных операций.Мне нужно отобразить эти транзакции и получить промежуточный итог, рассчитанный на основе произвольного начального баланса (который всегда является первой записью).

Я создал представление на основе этого запроса:

SELECT t1.[ID], t1.[Date], t1.[PO], t1.[Debit], t1.[Credit],
       ( SELECT SUM( t2.[Credit] ) - SUM ( t2.[Debit] ) 
         FROM [Transaction] t2 
         WHERE t2.[ID] <= t1.[ID] ) AS [Balance]
FROM   [Transaction] t1

и это работает.Проблема в том, что иногда мне нужно сделать заказ по дате и / или PO #, и когда я делаю это, когда значение столбца Баланс является правильным, это не в порядке.Кроме того, мне нужно отфильтровать по дате, поэтому я не думаю, что смогу использовать вычисляемый столбец в таблице транзакций.

Я рассмотрел использование значения ROWID, но без изменений.Насколько я могу найти, Sqlite не поддерживает ROW_NUMBER() OVER().Я потратил пару дней, пытаясь обдумать это без удачи.

Это приложение .NET Compact Framework, Sqlite ADO.NET версия 1.0.66 (не уверен, какая версия движка Sqlite этоесть).

1 Ответ

1 голос
/ 02 марта 2011

Решением действительно было добавить поле Balance в таблицу и обновить его с помощью триггеров, когда записи добавляются / редактируются / удаляются.Оказывается, мой реальный вопрос был не столько в том, как сделать промежуточный итог, сколько в том, чтобы делать то, что я пытался сделать, а именно в базе данных банкира, как это было предложено MPelletier.Я нашел примеры триггеров, которые мне были нужны, в этой теме , которые, немного подправив, заставили меня сделать то, что мне было нужно.Следовательно, я больше не нуждаюсь в представлении, поскольку его единственное назначение было для промежуточного итога.

...