AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SQL: Kosten anteilig auf Jahre aufteilen

SQL: Kosten anteilig auf Jahre aufteilen

Ein Thema von DCoderHH · begonnen am 8. Mär 2018 · letzter Beitrag vom 8. Mär 2018
Antwort Antwort
DCoderHH

Registriert seit: 4. Feb 2015
Ort: Hamburg
84 Beiträge
 
Delphi 10 Seattle Professional
 
#1

SQL: Kosten anteilig auf Jahre aufteilen

  Alt 8. Mär 2018, 08:37
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBDAC
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:
Nutzungszeiten
--------------
ID      Integer
Von     Date
Bis     Date
Kosten  Numeric(18,4)
Mit diesen Beispieldaten:

Code:
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
Und möchte diese Auswertung erhalten:

Code:
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 %
Rundungsdifferenzen sollen zum letzten Zeitraum addiert werden. Es darf nichts verloren gehen.

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!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.100 Beiträge
 
Delphi 12 Athens
 
#2

AW: SQL: Kosten anteilig auf Jahre aufteilen

  Alt 8. Mär 2018, 09:03
* MIN und MAX der Jahre aller Datensätze
* für die Abfrage der Daten der jeweiligen Jahre:
eine Serie über MIN..MAX ( http://www.delphipraxis.net/188280-l...-finden-2.html )
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 8. Mär 2018 um 10:04 Uhr)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#3

AW: SQL: Kosten anteilig auf Jahre aufteilen

  Alt 8. Mär 2018, 09:35
Code:
.. YearOf(VON))::DATE .. (Min(JAHR, YearOf(BIS))+1)::DATE-'1 day' ... auch +1 ..
ist postgres Syntax und müsste an Firebird angepasst werden.
Gruß, Jo

Geändert von jobo ( 8. Mär 2018 um 09:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.100 Beiträge
 
Delphi 12 Athens
 
#4

AW: SQL: Kosten anteilig auf Jahre aufteilen

  Alt 8. Mär 2018, 09:44
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#5

AW: SQL: Kosten anteilig auf Jahre aufteilen

  Alt 8. Mär 2018, 09:55
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz