Je veux calculer DPD (jours après-vente) de la liste de prêt triés par date. Chaque date d'échéance du passé doit être recomptée. Voir exemple dans Joindre STROR>. Comment puis-je calculer la colonne "Jours antérieurs dus"? p>
p>
3 Réponses :
Je lis cela en tant que serveur SQL pour une raison quelconque. Les conventies suivantes utilisent des conventions SQL Server pour les fonctions de date. D'autres bases de données ont des fonctions similaires, mais la syntaxe exacte diffère.
L'IDA clé - un maximum conditionnel cumulatif - ne change pas: P>
select t.*, (case when status = 'PastDue' then datediff(date, max(case when status <> 'PastDue' then dayDate end) over (partition by loadnumer order by daydate) else 0 end) as daysPastDue from t;
Vous voulez compter les jours consécutifs de «passé dû» et réinitialiser le compteur entre les deux. C'est des lacunes et un problème de l'île.
Si les dates augmentent toujours de 1 jour, comme indiqué dans vos données d'échantillon, une méthode consiste alors à faire la différence entre la date et le code> Row_Number () code> pour définir Le groupe Chaque enregistrement appartient à. p>
Vous n'avez pas dit quelle base de données que vous utilisez, voici une méthode utilise Démo sur DB Fiddle Strard>: p> p> daadd (code> daadd () code> pour faire le calcul de la date; bases de données qui ne supportent pas une fonction équivalente. p>
loan_number | daydate | status | daysPastDue
----------: | :--------- | :------- | ----------:
111111 | 2020-01-01 | Live | 0
111111 | 2020-01-02 | Live | 0
111111 | 2020-01-03 | PastDue | 1
111111 | 2020-01-04 | PastDue | 2
111111 | 2020-01-05 | Restruct | 0
111111 | 2020-01-06 | Restruct | 0
111111 | 2020-01-07 | Restruct | 0
111111 | 2020-01-08 | PastDue | 1
111111 | 2020-01-09 | PastDue | 2
111111 | 2020-01-10 | Closed | 0
Cela devrait le faire.
SELECT t1.LoanNumber, t1.daydate, t1.Status, case when status = 'Past Due' then datediff(day, (select max(daydate) from table1 t2 where t2.loanNumber =t1.loanNumber and t2.daydate<t1.daydate and t2.status<> 'Past Due' ), daydate) else 0 end as [Days Past Due] from table1 t1
Veuillez baliser votre question avec la base de données que vous utilisez: mysql, oracle, postgresql ...? En outre, il serait bien préférable de fournir vos données en tant que texte tabulaire plutôt que comme une image.
Veuillez baliser votre question avec la base de données que vous utilisez.
Quel est votre résultat souhaité? Pour ce prêt, le DPD serait-il 4, 6, 0 ou autre chose?