Ich habe eine gespeicherte Prozedur, die einen Cursor zurückgibt.Oracle Pl/SQL geben einen Cursor aus mehreren Abfragen
Die Anwendung übergibt einen Parameter an die Prozedur, die festlegt, wie viele IDs abgerufen werden sollen, so dass die Prozedur einen Kopf der Zeit dieser Nummer nicht kennt.
foreach ID Ich muss die oberen 3 Datensätze mit dieser ID abrufen. , was ich versucht habe, ist mit:
select * from table_name where id in (List of ID`s);
Diese Abfrage funktioniert, aber ich kann nicht die Top-3 jeder ID erhalten. Wenn ich die Anzahl der Ergebnisse limitiere, bekomme ich die TOP-Ergebnisse der ersten ID.
Ich dachte mit For Loop, Ausführen der Abfrage für jede ID und fügen Sie die Ergebnisse an den Cursor, aber wie ich es verstehe, ist es unmöglich.
Irgendwelche Ideen?
Weitere Details Lets sagen, ich habe 5 ID s and each of them have inner Id
s so Id 1 hat (1,2,3,4,5) Id 2 (1,2,3,4,5) Id 3 (12,14,15,16,22) Id 4 (2,3,5,7,9) Id 5 (4,7,8,9,10) In diesem Fall, mit dem ich es zu tun habe Ich sehe nicht, wie die Zeilennummer mir helfen wird. Ich brauche die oberen 3 für jede ID, in diesem Fall sollte der Cursor 15 Ergebnisse haben.
10x viel und ein gutes Wochenende haben;)
Ich habe eine Möglichkeit, die Top 3 für jede ID der ID einzeln zu bestimmen. –
@Udi l: Das ist, was der 'PARTITION BY'-Teil einer analytischen/Ranking/Windowing-Funktion tut (in diesem Fall ROW_NUMBER). –
Ihre Lösung funktioniert perfekt, genau das, was ich brauchte. 10x viel. –