Forum » Programiranje » sql select stavek
sql select stavek
mrsmoke ::
Pozdravljeni!
Imam tabelo:
Kako bi iz tabele dobil vse zadnje cene predmetov glede na datum? Posortirano po predmetih. Samo z sql.
Rezultat:
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.
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
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
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
Č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:
Kdor se je spomnu sintakso INNER JOIN si zasluži natik na kol.
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
Lion29 ::
matr komplicirate
to bi veljalo le v primeru, da bi imeli vsi izdelki spremembe na enak datum
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.
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
drgaci pa mislim, da je zavajon dal elegantnejso resitev... nisem pa sel preverjat
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...
Sam sem se tej sintaksi nekaj časa upiral, ampak moram brati in dopolnjevati tudi kodo drugih, tako da...
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [SQL] Pohitritev izpisaOddelek: Programiranje | 2890 (1789) | kuall |
» | SQL vprašanjeOddelek: Programiranje | 1107 (706) | MrStein |
» | [SQL] Unikatni izpisiOddelek: Programiranje | 2210 (1597) | 111111111111 |
» | [SQL] PgAdmin preprosto vprasanje povezano s stolpci v tabeliOddelek: Programiranje | 2192 (1551) | Cvele2011 |
» | podatkovna bazaOddelek: Programiranje | 2028 (1849) | scarymovie |