J'expérimente avec une application de finances personnelles, et je réfléchis à l'approche à adopter pour mettre à jour les soldes en cours lors de la saisie d'une transaction dans un compte. Actuellement, la façon dont j'utilise consiste à récupérer tous les enregistrements plus récents que ceux insérés/modifiés, et à les augmenter un par un en augmentant leur solde.Comment mettre à jour une valeur de colonne de manière incrémentielle
Par exemple, compte tenu des opérations suivantes:
date t1 = 2008-10-21, quantité = 500, en cours d'exécution balance = 1000
date t2 = 2008-10-22, quantité = 300, solde courant = 1300
date t3 = 2008-10-23, montant = 100, solde courant = 1400 ...
Supposons maintenant que j'insère une transaction entre t1 et t2, puis t2 et toutes les transactions ultérieures aurait besoin de leur annonce de soldes de fonctionnement juste.
Hehe, maintenant que je l'ai écrit cette question, je pense que je connais la réponse ... donc je vais le laisser ici au cas où il aide quelqu'un d'autre (ou peut-être il y a même une meilleure approche?)
Première , Je reçois le solde de la transaction précédente, dans ce cas, t1. Ensuite, mettre à jour toutes les transactions suivantes (qui comprendrait le nouveau):
UPDATE transactions
SET running_balance = running_balance + <AMOUNT>
WHERE date > <t1.date>
Le seul problème que je vois est que maintenant au lieu de stocker uniquement une date, je vais devoir stocker un temps aussi. Bien, que se passerait-il si deux transactions avaient exactement la même date/heure? PS: Je préférerais des solutions n'impliquant pas de fonctionnalités propriétaires, car j'utilise PostgreSQL et SQLite ... Bien qu'une solution Postgre seule serait également utile.
Je pensais aussi à la colonne d'identité, mais le problème est que si je déplace une transaction dans le temps, l'identifiant ne serait d'aucune utilité. Je pense que ce serait le même problème avec une colonne "created_on" ne pensez-vous pas? Ou je ne vous suis pas? – Ivan
Trier par. Le point principal de la colonne d'identité et/ou de la colonne created_on serait de vous permettre de voir l'ordre réel des choses créées indépendamment de la date de transaction que vous lui avez donnée. Cela vous permettra également de vous assurer que votre logique est correcte pour mettre à jour les autres lignes aussi. –
Je suis désolé, je ne comprends toujours pas. J'ai une colonne d'identité, mais je ne pense pas qu'il soit utile de savoir dans quel ordre les transactions ont été créées car ce qui compte est la colonne de date réelle. Pourriez-vous élaborer un peu plus sur comment pourrais-je l'utiliser pour résoudre ce problème? Merci. – Ivan