![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBDAC
SQL: Kosten anteilig auf Jahre aufteilen
Ich habe Nutzungszeiten und Kosten von Gegenständen. Die Kosten sollen nun pro Jahr dargestellt werden. Dabei ist zu beachten, dass die Nutzungszeiten über keine oder beliebig viele Jahresgrenzen gehen können. Die Kosten sollen prozentual nach der Nutzung in einem Jahr aufgeteilt werden. D.h. wenn z.B. 20 % des Nutzungszeitraumes eines Gegenstandes im Jahr 2018 liegen, sollen auch 20% seiner Kosten diesem Jahr zugeordnet werden.
Ich habe diese Tabelle:
Code:
Mit diesen Beispieldaten:
Nutzungszeiten
-------------- ID Integer Von Date Bis Date Kosten Numeric(18,4)
Code:
Und möchte diese Auswertung erhalten:
ID VON BIS KOSTEN
1 01.07.2017 01.08.2018 120 2 22.12.2017 10.01.2018 100 3 07.02.2019 09.03.2021 500
Code:
Rundungsdifferenzen sollen zum letzten Zeitraum addiert werden. Es darf nichts verloren gehen.
JAHR KOSTENANTEIL (Erklärung)
2017 170 (100 % von ID1 120 + 50 % von ID2 100) 2018 50 (50 % von ID2 100) 2019 215 (43 % von ID3 500) 328 Tage / 762 Tage = 43 % 2020 240 (48 % von ID3 500) 366 Tage / 762 Tage = 48 % 2021 45 ( 9 % von ID3 500) 68 / 762 Tage = 9 % Wie fange ich am Besten an? Brauche ich dafür irgendwie eine zweite Tabelle mit den Jahren/Tagen? Oder geht das alleine mit Group by? Danke! |
AW: SQL: Kosten anteilig auf Jahre aufteilen
* MIN und MAX der Jahre aller Datensätze
* für die Abfrage der Daten der jeweiligen Jahre: eine Serie über MIN..MAX ( ![]() oder einfach nur alle Jahre der Datensätze (DISTINCT ORDER BY und so) * jeweils TAGE zwischen VON und BIS (+1, also inkl. des letzten Tages) und TAGE zwischen Jahresanfang Max(JAHR, YearOf(VON))::DATE und Jahresende (Min(JAHR, YearOf(BIS))+1)::DATE-'1 day' ... auch +1 > damit kannst du schonmal den Anteile ausrechnen * und nun erstmal die abgerundeten anteiligen Kosten ausrechnen so, das am Besten gleich mal in nen VIEW, weil du das nochmal brauchst (oder du rechnest halt doppelt) SELECT auf den VIEW und wenn YearOf(BIS) = YAHR, dann die Gesamtkosten des Datensatzes abzüglich der Kosten der Teiljahre und das Ergebnis (Rundungsdifferenzen) mit dazurechnen und am Ende nochmal ein GROUP BY Jahr drüber (oder ohne GROUP, um zu sehn was von wo kommt) |
AW: SQL: Kosten anteilig auf Jahre aufteilen
Zitat:
|
AW: SQL: Kosten anteilig auf Jahre aufteilen
Ist mehr ein gekürzter DB-unabhängiger Pseudocode.
Das "Min" dort heißt auch anders, aber das hätte das DBMS an der Stelle auch bemängelt und wäre bestimmt wer auf die Idee gemommen die richtigen "Kleinster/Größter" zu verwenden. :stupid: |
AW: SQL: Kosten anteilig auf Jahre aufteilen
Ich würde es eher "DB abhängiger Pseudo Code" nennen :)
Aber egal, guter Stoff mit vielen nützlichen Hinweisen! Und wir sind ja in einem Forum, man kann im allergrößten Notfall nachfragen. ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:37 Uhr. |
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-2025 by Thomas Breitkreuz