J'ai une base de données avec des données héritées qui stocke des transactions et utilise une méthode "seau" pour déterminer les soldes de compte. J'ai besoin d'un moyen de vieillir en raison des comptes.Les segments SQL déterminent le groupe d'âge
Tableau Transactions
TransactionId
TransactionType (CHARGE, REÇU)
Montant
POSTDATE
Pour obtenir l'équilibre actuel:
SELECT SUM(CASE TransactionTypeId WHEN RECEIPT THEN Amount * -1 ELSE Amount END) CurrentBalance
je besoin d'un moyen de déterminer échues 30, 60, 90, 120, etc:
Compte C dusyst 30 60 90 120+
12345 $ 50,00 0,00 $ 25,00 $ 25,00 $ 0,00 $
J'ai essayé de lancer des requêtes distinctes et limiter la CHARGE postdate à plus de 30,60,90,120, en cours d'exécution pour chaque groupe et en soustrayant les autres, etc, mais ne peux pas les résultats attendus.
La table ne stocke pas de drapeau pour les arriérés, tous les soldes sont calculés à la volée.
Ai-je oublié quelque chose de simple? J'ai essayé une recherche de réseau, mais je ne sais pas s'il existe un terme pour ce type de requête sql.
La base de données est SQL Server si cela vous aide.
TIA
@Andomar - reçus qui sont arrivés récemment (à savoir dans les 30 derniers jours) devraient être soustraites du montant PastDue30 - peut-être juste exclure la _charges_ au cours des 30 derniers jours? - Ils ne sont pas encore en retard. –
@martin clayton: Donc, le "dû" est-il vraiment des frais de 30 jours qui n'ont pas encore été payés? Vous pouvez calculer cela en SQL en échangeant les clauses 'when'. Je vais l'ajouter à la réponse – Andomar
pense ainsi, et belle solution, +1. –