Kleine Erklärung:ROWNUMBER Funktion in Oracle
Ich habe eine Tabelle passes
genannt und es wird mit 2 Tischen (services
(cod_serv) und atend
(Pass)) verknüpft. Pässe können für verschiedene Dienste dupliziert werden.
Eg .: Wenn ich 3-Dienste haben, kann ich drei Pässe nº 01, ABER nicht 2 Pässe nº 1 für den gleichen Dienst (I definiert es in meinem Composite Primärschlüssel).
Für Tests habe ich 102 Durchgänge hinzugefügt (alle mit Situation = "F" und mit demselben Datum (heute)). Dann fügte ich Pässe für jeden Dienst hinzu (ich habe 3 Dienste).
Die folgende Abfrage soll zeigen, wie die schema
mehr oder weniger definiert ist.
SELECT DISTINCT s.pass, s.data, cod_serv, situation, hour, min
FROM passes
JOIN atend a ON s.pass = a.pass;
PASS DATA COD_SERV S HOUR MIN
----- -------- --------- - ------- -------
04 26/03/16 2 F 12 24
04 26/03/16 1 F 13 27
13 26/03/16 1 F 14 26
18 26/03/16 3 F 14 27
18 26/03/16 2 F 14 28
15 26/03/16 1 F 14 29
10 26/03/16 3 F 14 30
... ... ... ... ... ...
Dann mag ich den 100. (ROWNUMBER()
) Pass erhalten (wie es zeigt, darunter 21 ist) ab einem bestimmten Zeitpunkt mit der Situation = ‚F‘ Bestellung per Stunde und min.
Zeilennummer 100:
21 26/03/16 3 F 14 34
Die folgende query
wird nichts zurückkehrt, und ich kann nicht herausfinden, warum. Übrigens habe ich mehr als 100 Pässe mit dieser Situation.
SELECT DISTINCT pass, data, cod_serv, situation FROM
(SELECT DISTINCT a.pass, s.data, cod_serv, situation,
ROW_NUMBER() OVER(PARTITION BY situation, hour, min
ORDER BY situation, hour, min) row
FROM passes s
JOIN atend a ON s.pass = a.pass
WHERE situation = 'F' AND
TRUNC(a.data) = TRUNC('some date'))
WHERE row = 100;
EDIT:
Meine Anfrage zur Zeit:
SELECT DISTINCT pass, cod_serv FROM
(SELECT DISTINCT s.pass, cod_serv,
ROW_NUMBER() OVER(PARTITION BY TRUNC(s.data)
ORDER BY a.hour, a.min) row
FROM passes s
JOIN atend a ON s.pass = a.pass
WHERE s.situation = 'F' AND
TRUNC(s.data) = TRUNC(SYSDATE))
WHERE row = 100;
Sie wollen '(Partition nach Datenreihenfolge nach Stunde, min)' –
und 'Situation'? – developer033
Alle Zeilen haben sowieso den gleichen Wert für die Situation (wegen 'situacao = 'F''), so dass es nicht notwendig ist, sie in die Fensterdefinition oder in die Reihenfolge von –