Załóżmy, że mam tabelę t
wypełniony tak:Jak agregować uporządkowane podzbiory wierszy w SQL?
x y z
- - -
A 1 A
A 4 A
A 6 B
A 7 A
B 1 A
B 2 A
Zasadniczo kolumny X i Z są losowe litery i Y liczb losowych.
Chcę agregują rzędy następująco:
x z min(y) max(y)
- - ------ ------
A A 1 4
A B 6 6
A A 7 7
B A 1 2
Innymi słowy: Biorąc pod uwagę, że wiersze są sortowane przez X, Y i Z, wybierz minimalną i maksymalną y dla każdego kolejnej grupy zx i z.
Zauważ, że to zapytanie nie jest to, czego potrzebujesz:
select x, z, min(y), max(y)
from t
group by x, z
Jak miałoby to skutkować następującym niechcianego wyniku:
x z min(y) max(y)
- - ------ ------
A A 1 7
A B 6 6
B A 1 2
Więc pytanie brzmi: czy istnieje sposób, aby wyrazić to, co Chcę w SQL?
(W przypadku, gdy rozwiązanie zależy od dialektu SQL. Rozwiązanie Oracle będzie korzystne)
myślę 'B A 1 1 'jest niepożądany hałas (zgodnie ze specyfikacją). –
Dobrze, przepraszam! – Rubrick
Możesz to osiągnąć za pomocą [Funkcje analityczne] (http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions004.htm). –