» »

sql select stavek

sql select stavek

mrsmoke ::

Pozdravljeni!
Imam tabelo:
ID  predmet  Datum       cena
1    A       1.12.2010    10
2    B       1.1.2009     8
3    A       10.11.2010   11
4    A       31.12.2010   20
5    B       1.1.2008     3


Kako bi iz tabele dobil vse zadnje cene predmetov glede na datum? Posortirano po predmetih. Samo z sql.
Rezultat:
4    A       31.12.2010   20
2    B       1.1.2009     8

WarpedGone ::

Hehe, tole je tak zelo tipičen SQL problem.
Za odgovor morš najprej povedat katera baza? Rešitev je več možnih, nobena ni pa čist trivialna.
Zbogom in hvala za vse ribe

lurker ::

Zakaj bi bilo to odvisno od dialekta in zakaj zadeva ne bi bila trivialna?

A kje ne dela:

select predmet, max(datum) as datum, max(cena) as cena
from TEST
group by predmet
order by predmet

?

edit: A, ok, vidim, da želi še ident v resultset-u

Zgodovina sprememb…

  • spremenilo: lurker ()

Lion29 ::

to ni lih v redu, ker je order by predmet, moglo bi biti by Datum desc..

sicer pa dajte se folk naucte upodabljat male crke za imena table in za imena polj...

nekaj z veliko nekaj z malo je izredno slaba praksa...

dobra praksa je imeti tudi vse v anglescini, sploh ce se bolj resno s tem ukvarjas
Founder and CTO @ Article-Factory.ai

zavajon ::

A želiš imeti najvišjo ceno ali zadnjo ceno?
Če želiš zadnjo, bi to šlo nekako tako:

select t1,predmet, t1.datum, t1.cena
from tabela t1
inner join (
select predmet, max(datum)
from tabela
group by predmet) t2 on t1.predmet=t2.predmet and t1.datum=t2.datum

WarpedGone ::

@lurker: tvoja rešitev je narobe :) vrne max ceno in ne ceno na prikazan max datum

Stvar je treba načeloma speljat z gnezdenjem SQLov, nekaj podobnega temule:

SELECT PREDMET, 
       DATUM, 
       (SELECT CENA FROM TEST WHERE PREDMET = sub.PREDMET AND DATUM = sub.DATUM AND ROWNUM < 2) AS CENA
FROM (SELECT PREDMET, MAX(DATUM) as DATUM
        FROM TEST
       GROUP BY PREDMET
     ) sub
ORDER BY sub.PREDMET


Kdor se je spomnu sintakso INNER JOIN si zasluži natik na kol.
Zbogom in hvala za vse ribe

zavajon ::

WarpedGone je izjavil:

Kdor se je spomnu sintakso INNER JOIN si zasluži natik na kol.

Se strinjam, ampak žal jo je tudi Oracle prevzel, zato se moramo hočeš nočeš navajati nanjo :|

lurker ::

@lurker: tvoja rešitev je narobe :)
Res je. Kje je "blushes" smajli?

Lion29 ::

matr komplicirate
SELECT *
FROM   izdelki
WHERE  datum=(SELECT MAX(datum) FROM izdelki);


to bi veljalo le v primeru, da bi imeli vsi izdelki spremembe na enak datum
Founder and CTO @ Article-Factory.ai

Zgodovina sprememb…

  • spremenil: Lion29 ()

plevcek ::

@Lion29:
nimaš prav. S tem dobiš samo izdelke, ki imajo največji datum. V tem primeru dobiš ven samo izdelek A!

WarpedOne je napisal pravo rešitev.

Lion29 ::

plevcer: sej sem dopisal zraven, ce bi imeli vsi izdelki na isti datum spremenjeno ceno, bi dobil ven najvisje cene za vsak izdelek ... to je prakticno le, ko se dela recimo enkrat na dolocen dan posodobitve za vse, tudi ce ni spremenjena cena...

drgaci pa mislim, da je zavajon dal elegantnejso resitev... nisem pa sel preverjat :D
Founder and CTO @ Article-Factory.ai

WarpedGone ::

Se strinjam, ampak žal jo je tudi Oracle prevzel, zato se moramo hočeš nočeš navajati nanjo

Prevzel jo je, da lahko na fičr-list napiše podporo SQL91 standardu (al kolk je že točna cifra). Nima pa nič proti če uporabljaš "njegovo" sintakso.
Ko maš SQLe čez par strani, mešanico full in outerjoinov nad 30 tabelami, več subselectov ipd. je vsak gram večje preglednosti zlata vreden.

drgaci pa mislim, da je zavajon dal elegantnejso resitev

Zato sm pa vprašal katera baza. Ker je "elegantno" vezano na določeno implementacijo in navajenost.
Zbogom in hvala za vse ribe

zavajon ::

Oracle celo forsira to sintakso: http://education.oracle.com/pls/web_pro...
Sam sem se tej sintaksi nekaj časa upiral, ampak moram brati in dopolnjevati tudi kodo drugih, tako da...


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[SQL] Pohitritev izpisa

Oddelek: Programiranje
252890 (1789) kuall
»

SQL vprašanje

Oddelek: Programiranje
81107 (706) MrStein
»

[SQL] Unikatni izpisi

Oddelek: Programiranje
212210 (1597) 111111111111
»

[SQL] PgAdmin preprosto vprasanje povezano s stolpci v tabeli

Oddelek: Programiranje
222192 (1551) Cvele2011
»

podatkovna baza

Oddelek: Programiranje
52028 (1849) scarymovie

Več podobnih tem