Tomasz W.

Tomasz W. Administrator
Systemów
Informatycznych

Temat: [ Oracle SQL ] Czy funkcja MAX ?

Witam,
proszę o pomoc w zastosowaniu zapytania to tabeli.

Select * from tabela zwraca takie wartości:

Order Name Number
K100 abc 1
K100 abc 2
K100 cde 3
K100 vfr 4
K100 bgt 5
K100 abc 6
K200 abc 1
K200 abc 2
K200 cde 3
K200 vfr 4
K200 bgt 5
K400 abc 1
K400 abc 2
K400 abc 3
K500 cde 1
K500 vfr 2
K500 bgt 3
K500 abc 4
K500 abc 5
K500 abc 6
K500 cde 7
K500 vfr 8

Jakie utworzyć zapytanie aby otrzymać taki wynik:
Dla każdej wartości Order pokazać tylko jej maksymalną wartość Number

K100 abc 6
K200 bgt 5
K400 abc 3
K500 vfr 8
K% % MAX

Dziękuję
Pozdrawiam
Tomek

konto usunięte

Temat: [ Oracle SQL ] Czy funkcja MAX ?

Może tak...?
select * from tabela where order||number in
(select a.order||max(a.number) from tabela a
group by a.order)
:)Ten post został edytowany przez Autora dnia 02.12.16 o godzinie 09:11
Tomasz W.

Tomasz W. Administrator
Systemów
Informatycznych

Temat: [ Oracle SQL ] Czy funkcja MAX ?

Dziękuję, wstępnie działa :)
Proszę wyjaśnij mi jeszcze co robią operatory: | | - nigdy ich nie stosowałem.
To jest złączenie ?
Jak działa to zapytanie ?

konto usunięte

Temat: [ Oracle SQL ] Czy funkcja MAX ?

:)
To jest taka szybka konkatenacja... :) czyli złączenie.
Można by to było napisać bardziej klasycznie
select x.* from tabela x
inner join (select a.order,max(a.number) number from tabela a
group by a.order) b on b.order=x.order and b.number=x.number
...
Z tym, że jestem leniwy z natury a ten drugi sposób będzie raczej dla duuuużych tabel typu tabela.
Z resztą, wszystko zależy też od konfiguracji samej bazy.
Tomasz W.

Tomasz W. Administrator
Systemów
Informatycznych

Temat: [ Oracle SQL ] Czy funkcja MAX ?

w wersji dla mniej leniwych ;) nie działa ...

nie rozpoznaje aliasu b
.. b on b.order=x.order ... itd

... select a.order,max(a.number) number ... number jest w tym przypadku aliasem max(a.number) ?

konto usunięte

Temat: [ Oracle SQL ] Czy funkcja MAX ?

Tomasz W.:
w wersji dla mniej leniwych ;) nie działa ...

nie rozpoznaje aliasu b
.. b on b.order=x.order ... itd

... select a.order,max(a.number) number ... number jest w tym przypadku aliasem max(a.number) ?
:)
Dziwne ale możliwe... (sprawdzałem to lokalnie i OK, może coś w tekście?)
tak jest to alias dla max(a.number) bo silnik nadaje takiemu wynikowi własne nazwy ...
Innymi słowy b, to tablica (wirtualna) zawierająca wszystkie zestawy order i MAX(number) a złączenie powoduje, że tablica pokazywana jest tylko dla pozycji dla których jest to spełnione...
Idea jest podobna z tym, że w pierwszym przypadku (konkatenacji) wybrane wartości order||MAX(number) pamiętane są pod postacią zmiennej więc, jak już pisałem, stosowanie tej pierwszej metody dla tablic zawierających dużą ilość różnych wartości "order" jest ograniczona rozmiarem zmiennej....
Tomasz W.

Tomasz W. Administrator
Systemów
Informatycznych

Temat: [ Oracle SQL ] Czy funkcja MAX ?

Ale działa konkatenacjia - wstawiłem ją do swojego zapytania, które pobiera dane z 2 tabel ( 7 tys rekordów i 7 tys rekordów ) + rożne warunki - zwraca wynik w przyzwoitym czasie 0,5 sek :)

Dziękuję bardzo za pomoc :)
Pozdrawiam
Tomek

Następna dyskusja:

[Oracle] SQL For Modeling -...




Wyślij zaproszenie do