Oracle Analytische Funktionen - Wie die Wiederverwendung einer PARTITION BY-Klausel?
Ich habe geschrieben eine komplexe SQL-Abfrage mit Oracle, in dem möchte ich zwei analytische Funktion auf der gleichen partition.
Let ' s Recht einfach, aber nicht zu viel:
SELECT col1,
MAX(col2) OVER(PARTITION BY col3, col4, col5, col6,
CASE WHEN col7 LIKE 'foo'
THEN SUBSTR(col7,1,5)
ELSE col7
END
ORDER BY col5 ASC, col6 DESC),
MIN(col2) OVER(PARTITION BY col3, col4, col5, col6,
CASE WHEN col7 LIKE 'foo'
THEN SUBSTR(col7,1,5)
ELSE col7
END
ORDER BY col5 ASC, col6 DESC)
FROM my_table;
Gibt es eine elegantere syntax für die Aliquotierung der PARTITION BY
- Klausel?
Danke.
- Wenn man bedenkt, dass die Funktionen, die Sie verwenden, sind
MAX
undMIN
und auchcol5
undcol6
sind in derpartition
und dieorder by
, dieorder by
- Klausel für jede Spalte erscheint überflüssig zu sein. - Du hast Recht aber dies war gedacht als ein einfaches Beispiel könnte es sein, LAST_VALUE oder jede andere Analyse.
- möglich, Duplikat der die Anwendung Mehrerer Fenster Funktionen Auf der Gleichen Partition. Dieses Duplikat war nicht leicht zu finden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie beziehen sich auf die standard-WINDOW-Klausel wie dieser:
dann glaube ich, die Antwort ist keine, Oracle unterstützt dies nicht (geprüft mit 11gR2).
7.4 <table expression>
. Schön. So weit, ich habe nur beobachtet, dass diese Klausel umgesetzt werden, Postgres...Können Sie subquery factoring, auch bekannt als die with-Klausel:
(ungetestet)
Grüße,
Rob.
WITH
das ist eine große Schlüsselwort in Oracle.(partition by ...)
Teil!!!!