Mehrere max Werte für einen Kunden
Hallo zusammen...
... ich habe eine Tabelle in der ich 2 Spalten abfragen möchte. Einmal die Kundennummer und eine Spalte mit einem Datum. Ich möchte für jede Kundennummer die letzten 3 Daten ausgeben. Aktuell bekomme ich es aber nur für einen Kunden hin und nicht für alle...
Die Abfrage sieht aktuell so aus:
select STA_KUN_NR, STA_EINGANG from (
select *
from stapel
where sta_unt_nr = 9
and sta_kun_untgst_nr = 0
and sta_kun_nr = 9999
order by sta_eingang desc
)
where rownum < 4;
Ergebnis:
STA_KUN_NR STA_EINGANG
9999 17.12.2010
9999 11.10.2010
9999 02.08.2010
Klar, so wie die Abfrage im Moment da steht frage ich nur einen Kunden ab.
Jetzt ist halt die große Frage, wie bekomme ich eine Abfrage hin, in der mir alle Kunden untereinander mit den letzten 3 Daten angezeigt werden?
Hat da jemand eine Idee?
... ich habe eine Tabelle in der ich 2 Spalten abfragen möchte. Einmal die Kundennummer und eine Spalte mit einem Datum. Ich möchte für jede Kundennummer die letzten 3 Daten ausgeben. Aktuell bekomme ich es aber nur für einen Kunden hin und nicht für alle...
Die Abfrage sieht aktuell so aus:
select STA_KUN_NR, STA_EINGANG from (
select *
from stapel
where sta_unt_nr = 9
and sta_kun_untgst_nr = 0
and sta_kun_nr = 9999
order by sta_eingang desc
)
where rownum < 4;
Ergebnis:
STA_KUN_NR STA_EINGANG
9999 17.12.2010
9999 11.10.2010
9999 02.08.2010
Klar, so wie die Abfrage im Moment da steht frage ich nur einen Kunden ab.
Jetzt ist halt die große Frage, wie bekomme ich eine Abfrage hin, in der mir alle Kunden untereinander mit den letzten 3 Daten angezeigt werden?
Hat da jemand eine Idee?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 159794
Url: https://administrator.de/contentid/159794
Ausgedruckt am: 22.11.2024 um 15:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo artus_Excalibur,
so wie ich das sehe, ist das über ungefähr solch eine Abfrage möglich (ungetestet):
select STA_KUN_NR, STA_EINGANG from (
select *
from stapel
where sta_unt_nr = 9
and sta_kun_untgst_nr = 0
order by sta_eingang desc
)
where
(
select count(*) from stapel as s
where s.STA_KUN_NR = stapel.STA_KUN_NR and s.sta_eingang < stapel.sta_eingang
)
<= 3
order by sta_kun_nr;
Ob du in der ersten Klammer das
where sta_unt_nr = 9
and sta_kun_untgst_nr = 0
noch brauchst hängt von der Bedeutung der Felder ab.
Musst mal schauen, ob dir sowas in der Art weiterhilft.
Grüße
LittleFlame
so wie ich das sehe, ist das über ungefähr solch eine Abfrage möglich (ungetestet):
select STA_KUN_NR, STA_EINGANG from (
select *
from stapel
where sta_unt_nr = 9
and sta_kun_untgst_nr = 0
order by sta_eingang desc
)
where
(
select count(*) from stapel as s
where s.STA_KUN_NR = stapel.STA_KUN_NR and s.sta_eingang < stapel.sta_eingang
)
<= 3
order by sta_kun_nr;
Ob du in der ersten Klammer das
where sta_unt_nr = 9
and sta_kun_untgst_nr = 0
noch brauchst hängt von der Bedeutung der Felder ab.
Musst mal schauen, ob dir sowas in der Art weiterhilft.
Grüße
LittleFlame
Moin artus,
ich meine das folgende müßte auch unter Oracle klappen (ungetestet, weil ich keine Oracle-DB parat habe):
Gruß, Mad Max
ich meine das folgende müßte auch unter Oracle klappen (ungetestet, weil ich keine Oracle-DB parat habe):
select sta_kun_nr, sta_eingang
from (select sta_kun_nr, sta_eingang,
row_number() over (partition by sta_kun_nr order by sta_eingang desc) as zeilennr
from stapel
where sta_unt_nr = 9 and
sta_kun_untgst_nr = 0) as t
where zeilennr <= 3;
Gruß, Mad Max