SQL Query zu jedem Eintrag eines Subquerys

TheOtherSide

Ensign
🎅Rätsel-Elite ’24
Registriert
Juli 2008
Beiträge
233
Hallo lieber Forumbase-Gemeinde,

ich habe mal wieder ein kleines Problem mit SQL und komme einfach nicht weiter.

Die Aufgabe:
Ich muss über einen Select eine Liste von Kunden ermitteln. Dieser Subquery ist bereits fetig und lieftert mir nur
Kundennummern zurück.
Die nächste Aufgabe ist es zu jedem Kunden die letzten 10 Besuche zu ermitteln, und hier hänge ich. Wie sage ich ihm
das er mir von jedem Kunden die letzen 10 Besuche, zusammen mit denen von allen anderen, anzeigen soll?


Ich hoffe ihr könnt meine Frage verstehen.



Mit freundlichen Grüßen,
TheOtherSide
 
Was hast du denn bislang gemacht? Wo genau hängst du denn? Bislang klingt das ganze lediglich nach einer Aufgabenstellung und keinem halbwegs funktionierenden Lösungsansatz, den wir evtl. korrigieren könnten.
 
Ich soll zum Kunden fahren. Welche Strecke soll ich nehmen? Ich hoffe ihr könnt meine Frage verstehen.


Ohne zu wissen, wie die Datenbank aussieht, kann man nicht helfen...
 
Ich wusste nicht wie ich es euch präsenttieren sollte, da mir ja der wirkliche Lösungsansatz fehlt. Ich kann es aber mal vereinfacht probieren.

Kudennummern-Select:
SELECT KD_NR
FROM TBL_KUNDEN
WHERE
SYSDATE BETWEEN VON_DTM AND BIS_DTM
AND DESTRICT_NR = 9

Besuch-SELECT:
SELECT *
FROM TBL_BESUCHE
WHERE KD_NR IN (Kudennummern-Select)


Ich möchte aber nur von jedem dieser Kunden die letzten 10 Besuche in die Wertung mit einfließen lassen.
Aber ich weiß leider nicht wie.


EDIT:
Die Besuche haben zwar alle ein Datumsfeld aber es gibt keine Zeitspanne die man anwählen kann. Einige Kunden werden mehrmals in der Woche beliefert andere nur einmal im halben Jahr.
 
also wenn du zwei abfragen willst...

Ergebnisse lassen sich sortieren und begrenzen in SQL... dürfte an sich kein großes Problem sein, das rauszufinden...
 
Hi,

ich wurde einen JOIN über die beiden Tabellen machen und dann eine Bedingung stellen. Eine Beziehung gibt es ja.
Vg Waldi
 
Ich benutze Oracle 11.

Gibt es da die Möglichkeit einer FOR-Schleife oder ähnlichem?
 
das geht mit join + window function,
müsste aber selbst gerade nachschlagen wie genau die syntax aussieht
Ergänzung ()

http://sqlfiddle.com/#!4/1a754/2/0
hab dir mal ein bsp zusammen gekloppt
was du anpassen musst ist das order by im OVER
dort musst du nach deiner besucher datum spalte sortieren lassen.

Hier das Select rein zur dokumentation:
Code:
Select * 
from (
  SELECT a.KD_NR, b.vs_nr, rank() over (PARTITION BY a.kd_nr order by vs_nr asc) "rank"
  FROM TBL_KUNDEN a
  join tbl_besuche b on a.kd_nr = b.kd_nr 
  --where a.datum = to_date('24.12.2013','dd.mm.yyyy')
)
where "rank" <= 10
 
Zuletzt bearbeitet:
würde da kein Join ausreichen?

Code:
SELECT *
FROM TBL_BESUCHE as a
inner join TBL_KUNDEN as b
    on a.KD_NR=b.KD_NR
WHERE
SYSDATE BETWEEN VON_DTM AND BIS_DTM
Einfache Mengenlehre.

es würde auch so gehen
Code:
SELECT *
FROM TBL_BESUCHE
WHERE KD_NR IN (SELECT KD_NR
FROM TBL_KUNDEN
WHERE
SYSDATE BETWEEN VON_DTM AND BIS_DTM
AND DESTRICT_NR = 9)
 
@rooker002: Naja es sollen pro "getroffenem" Kunde nur die letzten (aktuellsten) 10 Besuche bei der Anfrage rauskommen... ich sehe nicht, warum das bei deinen Abfragen gehen sollte/berücksichtigt wird.
 
Zuletzt bearbeitet:
Weil das nicht mit ein einfachen join geht,
wurden die window function "erfunden".

Die Window Function gibt es soweit in jeden rdbms,
nur in mysql fehlen sie.
 
Super, es hat alles funktioniert, so wie AlbertLast es beschrieben hat. Ihr habt mir mal wieder ein Wochenende voller Kopfschmerzen erspart.

Vielen, vielen Dank nochmal an euch alle. :)
 
Zurück
Oben