Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL: Jahresanteile des Vertags berechnen? (https://www.delphipraxis.net/175266-sql-jahresanteile-des-vertags-berechnen.html)

generic 12. Jun 2013 17:04

AW: SQL: Jahresanteile des Vertags berechnen?
 
Die Lösung in #20 ist gut! Lob!

Die Datumermittlung ist pfiffig, mit dem Subquerys und values.

Anfangs- und Ende-Überlappungen berücksichtigt und natürlich den Einschluss-Zeitraum.
Funktionieren kann es nur nicht wenn der Vertrag länger als 12 Monate laufen könnte, dass ist hier ja aber nicht Anforderung gewesen.

Man könnte die Selects noch in eine UDF auslagern.
http://stackoverflow.com/questions/1...math-max-in-ne

Furtbichler 12. Jun 2013 21:54

AW: SQL: Jahresanteile des Vertags berechnen?
 
Zitat:

Zitat von generic (Beitrag 1218392)
Funktionieren kann es nur nicht wenn der Vertrag länger als 12 Monate laufen könnte, dass ist hier ja aber nicht Anforderung gewesen.

Verstehe nicht, wieso das nicht laufen sollte. Ich habe es mit irgendwelchen krummen Laufzeiten getestet und da der Zeitraum eh gemappt wird, nämlich auf den Anfangs/Endzeitraum, müsste das funktionieren. Aber Gegenbeispiele -oder eine Erklärung- sind natürlich immer besser. Hast Du eines?

tgvoelker 13. Jun 2013 11:30

AW: SQL: Jahresanteile des Vertags berechnen?
 
generic, FBs Source funktioniert durchaus, wenngleich mir der SQL Server 2012 zum testen fehlt. Logisch ist das einwandfrei, sofern Verträge immer nur zum 1. beginnen können:

* Als erstes wird für jede Zeile entweder der 1.1.2012 oder das Anfangsdatum zurückgegeben, je nachdem, was größer ist
* dann wird das Enddatum oder der 31.12. zurückgegeben, je nachdem, was kleiner ist.
* dann fliegen alle die raus, bei denen nicht mindestens 1 Monat (Rundungsverhalten DateDiff? - bei Verträgen, die mitten im Monat beginnen) zwischen Anfang und Ende liegt.

Wenn Anfang nach dem 31.12.2012, dann fliegt der Tupel raus, weil dmax<dmin
Wenn Ende vor dem 1.1.2012, dann fliegt der Tupel raus, weil dmax<dmin
Wenn Anfang nach dem 1.1.2012 und Ende davor, dann ist dmin der richtige Anfang und dmax das richtige Ende.
Wenn Anfang vor dem 1.1.2012 und Ende zwischen 1.1.und 31.12., dann ist dmin 1.1. und dmax das richtige Ende
Wenn Anfang zwischen 1.1. und 31.12. und Ende danach, dann ist dmin der richtige Anfang und dmax 31.12.

Paßt also alles.

Ich würde das zwar anders machen (s.o.), weil ich meist alle Tupel haben und bei denen, die nicht betroffen sind, eine 0 drinstehen haben möchte, aber das ist kosmetisch.

generic 13. Jun 2013 11:58

AW: SQL: Jahresanteile des Vertags berechnen?
 
Wie gesagt, war nicht Anforderung.

Wenn ein Vertrag länger als 12 Monate wäre, dann würde die Daten raus fallen. Wie du schreibst.
Anteilig müsste so ein Vertrag aber mit 12 Monatsbeiträgen berechnet werden.

Kommt nun auf das Verwaltungssystem an, es ist aber normal das ein Vertrag immer für 1 Jahr geschlossen wird und dann nur pro Jahr verlängert wird bzw. erneuert wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:47 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz