[oracl] 8.1.7 - maxymalna wartosc
Marek Horodyski - 12-11-2006 01:32
[oracl] 8.1.7 - maxymalna wartosc
Cos nijak mi nie wychodzi :( Jak z tabelki :
ID OD_KIEDY KWOTA AAAATJ 200402 40 AAAATJ 200601 45 AAAATK 200402 8 AAAATK 200601 8 AAAATL 200402 3,2 AAAATL 200601 3,2 AAAATM 200402 0,8 AAAATM 200601 0,8
wybrac tylko te wiersze z kazdego ID, dla ktorego data OD_KIEDY jest najwieksza. Czy jest to mozliwe bez podzapytania ?
Pozdrawiam, Marek Horodyski
Rafal M - 12-11-2006 01:32
Marek Horodyski wrote: > Cos nijak mi nie wychodzi :( > Jak z tabelki : > > ID OD_KIEDY KWOTA > AAAATJ 200402 40 > AAAATJ 200601 45 > AAAATK 200402 8 > AAAATK 200601 8 > AAAATL 200402 3,2 > AAAATL 200601 3,2 > AAAATM 200402 0,8 > AAAATM 200601 0,8 > > wybrac tylko te wiersze z kazdego ID, dla ktorego data OD_KIEDY jest > najwieksza. > Czy jest to mozliwe bez podzapytania ? > > Pozdrawiam, > Marek Horodyski
SELECT MAX(OD_KIEDY) FROM tab GROUP BY ID
Marek Horodyski - 12-11-2006 01:32
Użytkownik "Rafal M" <rafalm1980@gazeta.pl> napisał w wiadomości news:efjkd3$r64$1@inews.gazeta.pl... > Marek Horodyski wrote: >> Cos nijak mi nie wychodzi :( >> Jak z tabelki : >> >> ID OD_KIEDY KWOTA >> AAAATJ 200402 40 >> AAAATJ 200601 45 >> AAAATK 200402 8 >> AAAATK 200601 8 >> AAAATL 200402 3,2 >> AAAATL 200601 3,2 >> AAAATM 200402 0,8 >> AAAATM 200601 0,8 >> >> wybrac tylko te wiersze z kazdego ID, dla ktorego data OD_KIEDY jest >> najwieksza. >> Czy jest to mozliwe bez podzapytania ? >> >> Pozdrawiam, >> Marek Horodyski > > SELECT MAX(OD_KIEDY) FROM tab GROUP BY ID
Ale wtedy gubie kwote - a to wlasnie o sume kwoty z poszczegolnych id na dany moment mi chodzi. Ta tabelke ma w 1 ms. Jakakolwiek zmiana, grupowanie itp. i juz klepsydre mozna wlaczac.
Marek Horodyski
Halibut - 12-11-2006 01:32
Użytkownik "Marek Horodyski" <m.horodyski@pzuzycie.com.pl> napisał w wiadomości news:efjit3$nio$1@nemesis.news.tpi.pl... > Cos nijak mi nie wychodzi :( > Jak z tabelki : > > ID OD_KIEDY KWOTA > AAAATJ 200402 40 > AAAATJ 200601 45 > AAAATK 200402 8 > AAAATK 200601 8 > AAAATL 200402 3,2 > AAAATL 200601 3,2 > AAAATM 200402 0,8 > AAAATM 200601 0,8 > > wybrac tylko te wiersze z kazdego ID, dla ktorego data OD_KIEDY jest > najwieksza.
Witam, Oto dwie propozycje (druga wersja powinna mieć lepszą wydajność):
Rozwiązanie 1: podzapytanie skorelowane
SELECT id, od_kiedy, kwota FROM tabela b WHERE od_kiedy = (SELECT MAX(od_kiedy) FROM tabela a WHERE a.id = b.id);
Rozwiązanie 2: z użyciem funkcji analitycznych (w 8.1.7 powinny już być):
SELECT id, od_kiedy, kwota FROM (SELECT id, od_kiedy, kwota, row_number() over(PARTITION BY id ORDER BY od_kiedy DESC) porzadek FROM tabela) WHERE porzadek = 1;
pozdrawiam Krzysztof Maciak
Marek Horodyski - 12-11-2006 01:32
Użytkownik "Halibut" <halibut.kmac@o2.pl> napisał w wiadomości news:efjoq4$2nh$1@atlantis.news.tpi.pl... > > Użytkownik "Marek Horodyski" <m.horodyski@pzuzycie.com.pl> napisał w > wiadomości news:efjit3$nio$1@nemesis.news.tpi.pl... >> Cos nijak mi nie wychodzi :( >> Jak z tabelki : >>
[ ... ]
> Witam, > Oto dwie propozycje (druga wersja powinna mieć lepszą wydajność): >
Z zapytania skorelowanego wlasnie to przerabialem. Powyzsza tabelke uzyskiwalem w złączeniu w ciagu milisekundy. A juz skorelowane uzaleznienie od daty trwalo ok. 7s. Wszelkie przerobki na LEWO = any( select ... ) lub ( 1, 2) in ( select 1, 2) nie dawaly polepszenia. Ale to 2 to wprost rewelacja ! :) O to mi chodzilo. Oracl musial miec takie future :)
Wielkie dzieki, Marek Horodyski
Rafal M - 12-11-2006 01:32
Marek Horodyski wrote: > > Użytkownik "Rafal M" <rafalm1980@gazeta.pl> napisał w wiadomości > news:efjkd3$r64$1@inews.gazeta.pl... >> Marek Horodyski wrote: >>> Cos nijak mi nie wychodzi :( >>> Jak z tabelki : >>> >>> ID OD_KIEDY KWOTA >>> AAAATJ 200402 40 >>> AAAATJ 200601 45 >>> AAAATK 200402 8 >>> AAAATK 200601 8 >>> AAAATL 200402 3,2 >>> AAAATL 200601 3,2 >>> AAAATM 200402 0,8 >>> AAAATM 200601 0,8 >>> >>> wybrac tylko te wiersze z kazdego ID, dla ktorego data OD_KIEDY jest >>> najwieksza. >>> Czy jest to mozliwe bez podzapytania ? >>> >>> Pozdrawiam, >>> Marek Horodyski >> >> SELECT MAX(OD_KIEDY) FROM tab GROUP BY ID > > Ale wtedy gubie kwote - a to wlasnie o sume kwoty z poszczegolnych id na > dany moment mi chodzi. > Ta tabelke ma w 1 ms. Jakakolwiek zmiana, grupowanie itp. i juz > klepsydre mozna wlaczac. > > Marek Horodyski
dlatego wlasnie Oracle jest gorszy od PostgreSQL, ktory ma DISTINCT :), a tyle kosztuje, a taka mala funkcjonalnosc ;)
Halibut - 12-11-2006 01:32
>> Użytkownik "Marek Horodyski" <m.horodyski@pzuzycie.com.pl> napisał w >> wiadomości news:efjit3$nio$1@nemesis.news.tpi.pl... >>> Cos nijak mi nie wychodzi :( >>> Jak z tabelki : >>> > > ( 1, 2) in ( select 1, 2) nie dawaly polepszenia. Ale to 2 to wprost > rewelacja ! :) > O to mi chodzilo. Oracl musial miec takie future :) >
Cieszę się, że informacje się przydały. Tu masz jeszcze krótką prezentację kilku innych przydatnych funkcji analitycznych: http://www.ploug.org.pl/szkola/szkol...06_KJ_Anal.pdf
pozdrawiam Krzysztof Maciak
Marek Horodyski - 12-11-2006 01:33
Użytkownik "Rafal M" <rafalm1980@gazeta.pl> napisał w wiadomości news:efjuje$76i$1@inews.gazeta.pl... > Marek Horodyski wrote: >> >> Użytkownik "Rafal M" <rafalm1980@gazeta.pl> napisał w wiadomości >> news:efjkd3$r64$1@inews.gazeta.pl... >>> Marek Horodyski wrote: >>>> Cos nijak mi nie wychodzi :( >>>> Jak z tabelki :
[...]
> dlatego wlasnie Oracle jest gorszy od PostgreSQL, ktory ma DISTINCT :), a > tyle kosztuje, a taka mala funkcjonalnosc ;)
Oracl tez ma DISTINCT, chociaz pewnie PostgreSQL ma go w wykonaniu funkcyjnym a nie deklaratywnym. Oracl ma odgromne mozliwosci na poziomie SQLa, a to duzy plus. Tylko to wszystko trzba znac. Nie wszystkie ksiazki i ksiazeczki o tym mowia. Ta skladnia Krzyska z 2 przykladu chodzi wprost jak burza :)
Pozdrawiam, Marek Horodyski
Paweł Matejski - 12-11-2006 01:33
Rafal M wrote: > > dlatego wlasnie Oracle jest gorszy od PostgreSQL, ktory ma DISTINCT :), > a tyle kosztuje, a taka mala funkcjonalnosc ;)
Oracle też ma. Tobie zapewne chodzi o DISTINCT ON. :)
-- P.M.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Zwracanie wartości, z funkcji, w funkcji [Js, Ajax]
Problem z wartościami w MySQL :( [ MySQL and ASP and VBScript ]
Insert do tabeli z danych innej tabeli plus dodatkowa wartośćpola (Firebird)
Ms SQL Server 2000 i błąd przy nie wypełnionej wartościo w polusmalldatetime
Jak wyswietlic dane z dwoch tabel gdy dla jednej z nich jest brak jest danej wartosci
[mysql 4.0.24] INSERT do tabeli z automatyczną inkrementacją wartości pola.
=?iso-8859-1?q?mysql_domyslna_wartosc_kom=F3rki?=
[Oracle] PLSQL - wartosc z innego pola w zmienianaym rekordzie
[MySQL] wektor wartosci jako typ danej?
dynamiczny sql w plsql, szukanie wartosci w kolumnach
zanotowane.pldoc.pisz.plpdf.pisz.platanvarne633.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|