Anzeige von Maximalwerten je Datensatz
Hallo,
ich habe ein Problem und komme einfach seit Stunden nicht richtig weiter, da ich selten SQL-Abfragen schreibe.
Es gibt eine Datenbank in der einige Datensätze vorhanden sind, die sich unter anderem durch identisches Startdatum und unterschiedlichem Enddatum als auch BonusStaffelID und BonusTypID unterscheiden:
Als Ergebnis kommt, von denen ich aber nur die gelb markierten angezeigt bekommen möchte:
Warum nur die gelb markierten:
Weil das Startdatum <= 30.09.2020 ist - das schließt für die Kombination Staffelname / Bonustyp die Zeile 1,2,4,5 ein.
Davon fallen 4 und 5 schon einmal raus weil diese Datensätze mit Startdatum 15.09. und 27.09. älter sind als die beiden mit dem Startdatum 30.09.
Es fällt Zeile 2 raus, weil das EndDatum mit dem 06.10. vor dem 08.10. aus Zeile 1 liegt.
Zelie 3 muss angezeigt werden, weil neue Kombination StaffelName/Bonustyp, ebenso 6 und 7
Also soll das irgendwie wie folgt sein:
KBS.Startdatum <= '30.09.2020' davon aber nur der Datensatz, der im ersten Schritt am nächsten nach unten betrachtet zum 30.09. liegt (das wäre der 30.09.) und im zweiten Schritt, der Datensatz, der dann noch das höchste Enddatum hat (08.10.)
Das ganze sinngemäß auch bei den anderen Kombinationen, so dass für jede Kombination aus Staffelname und BonusTyp nur ein Datensatz angezeigt wird.
Hat da jemand den entscheidenden Hinweis für mich?
Danke und LG
ich habe ein Problem und komme einfach seit Stunden nicht richtig weiter, da ich selten SQL-Abfragen schreibe.
Es gibt eine Datenbank in der einige Datensätze vorhanden sind, die sich unter anderem durch identisches Startdatum und unterschiedlichem Enddatum als auch BonusStaffelID und BonusTypID unterscheiden:
select BS.BonusStaffelName, BT.BonusTypName, KBS.BonusProzent, KBS.Startdatum, KBS.Enddatum From PBOKundeBonussatz KBS
left Join PBOBonusStaffeln BS on KBS.BonusStaffelID = BS.BonusStaffelID
left Join PBOBonusTyp BT on KBS.BonusTypID = BT.BonusTypID where KBS.KontoID = '4711' and KBS.Startdatum <= '30.09.2020' and KBS.aktiv = 0
Als Ergebnis kommt, von denen ich aber nur die gelb markierten angezeigt bekommen möchte:
Warum nur die gelb markierten:
Weil das Startdatum <= 30.09.2020 ist - das schließt für die Kombination Staffelname / Bonustyp die Zeile 1,2,4,5 ein.
Davon fallen 4 und 5 schon einmal raus weil diese Datensätze mit Startdatum 15.09. und 27.09. älter sind als die beiden mit dem Startdatum 30.09.
Es fällt Zeile 2 raus, weil das EndDatum mit dem 06.10. vor dem 08.10. aus Zeile 1 liegt.
Zelie 3 muss angezeigt werden, weil neue Kombination StaffelName/Bonustyp, ebenso 6 und 7
Also soll das irgendwie wie folgt sein:
KBS.Startdatum <= '30.09.2020' davon aber nur der Datensatz, der im ersten Schritt am nächsten nach unten betrachtet zum 30.09. liegt (das wäre der 30.09.) und im zweiten Schritt, der Datensatz, der dann noch das höchste Enddatum hat (08.10.)
Das ganze sinngemäß auch bei den anderen Kombinationen, so dass für jede Kombination aus Staffelname und BonusTyp nur ein Datensatz angezeigt wird.
Hat da jemand den entscheidenden Hinweis für mich?
Danke und LG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 609187
Url: https://administrator.de/contentid/609187
Ausgedruckt am: 22.11.2024 um 07:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo Aximand,
Deine Datenbank hast Du jetzt nicht verraten, das wäre interessant gewesen.
Wenn ich das richtig verstanden habe, dann suchst Du zu den verschiedenen Kombinationen von BonusStaffel und BonusTyp den letzten KundenBonussatz. Heißt also:
- erst die verschiedenen Kombinationen aus BonusStaffel und BonusTyp suchen
- dann nur den letzten Kundenbonussatz dazu lesen
- und am Ende noch den Namen von BonusStaffel und -Typ holen
In SQL Server sähe das etwa so aus:
Schönes Wochenende.
Gruß Mad Max
Deine Datenbank hast Du jetzt nicht verraten, das wäre interessant gewesen.
Wenn ich das richtig verstanden habe, dann suchst Du zu den verschiedenen Kombinationen von BonusStaffel und BonusTyp den letzten KundenBonussatz. Heißt also:
- erst die verschiedenen Kombinationen aus BonusStaffel und BonusTyp suchen
- dann nur den letzten Kundenbonussatz dazu lesen
- und am Ende noch den Namen von BonusStaffel und -Typ holen
In SQL Server sähe das etwa so aus:
select BS.BonusStaffelName,
BT.BonusTypName,
KBS.BonusProzent,
KBS.Startdatum,
KBS.Enddatum
from (select distinct BonusStaffelID, BonusTypID from PBOKundeBonussatz) b
cross apply ( select top (1) *
from PBOKundeBonussatz
where BonusStaffelID = b.BonusStaffelID and
BonusTypID = b.BonusTypID and
KontoID = '4711' and
Startdatum <= '30.09.2020' and
aktiv = 0
order by Startdatum desc, Enddatum desc) KBS
left Join PBOBonusStaffeln BS on b.BonusStaffelID = BS.BonusStaffelID
left Join PBOBonusTyp BT on b.BonusTypID = BT.BonusTypID
Schönes Wochenende.
Gruß Mad Max