[ Orome @ 20.10.2014. 13:13 ] @
Jednostavna situacija, proracunom dobijam odredjenu cenu i iz ovog upita mi treba red samo gde je najniza cena. Dajem upit i njegov rezultat pa ako moze pomoc.


select (t1.procenat+t2.procenat) procenat,t1.broj_dana,t2.cena,
t1.koef,round(t1.broj_dana*t1.koef/30,2) izr_koef,
round(t2.cena-(t2.cena*((t1.procenat+t2.procenat)+round(t1.broj_dana*t1.koef/30,2))/100),2) as zadnja_cena
from t1 left outer join t2 on t1.id=t2.id

ono sto ja radim ovde je u sustini dodam na procenat izr_koef i onda to odbijem od cene. taj novi podatak mi je nova cena. fora je u tome sto dobijem ovo

http://prntscr.com/4xyjb4

i to je tacno ali hocu da skratim postupak i treba mi red u kom je zadnja cena 8.45 jer je tu najniza, zanemarite ovu NULL vrednost, nju ću eliminisati. Znam da se moze preraditi upit da mi da samo taj red ali mi treba pomoc kako to izvesti. Da ja vec imam ovu kolonu zadnja cena ne bi bio problem nego je izracunavam svaki put.

Na stranu primer kako se moze izvuci iz formule neka agregatna vrednost, guglao sam ali ne mogu da pronadjem pogodak, ili je izvlacenje minimalne vrednosti ili uporedjivanje formula a meni treba nesto izmedju.
[ bogdan.kecman @ 20.10.2014. 13:35 ] @
min(a,b,c...) ?
[ Orome @ 20.10.2014. 13:44 ] @
nisam siguran da znam na sta mislis?
[ bogdan.kecman @ 20.10.2014. 14:19 ] @
imas 2 vrednosti, oces manju, kazes min (a,b) ...
malo si nemusto napisao pitanje pa ne kontam minimum cega hoces ... ono
sto sam ja skontao je da umesto cena i zadnja cena hoces mincena? onda
samo umesto tvog upita uradis

select (t1.procenat+t2.procenat) procenat,
t1.koef,round(t1.broj_dana*t1.koef/30,2) izr_koef,
min(t1.broj_dana,t2.cena,
round(t2.cena-(t2.cena*((t1.procenat+t2.procenat)+round(t1.broj_dana*t1.koef/30,2))/100),2))
as min_cena
from t1 left outer join t2 on t1.id=t2.id

e sad jbg ako nisi to pitao postavi pitanje kako valja
[ Orome @ 20.10.2014. 14:45 ] @
izvini. ovako, radi se samo o koloni zadnja cena koju izvodim iz formule. na linku vidis rezultat koji mi daje upit. rezultat je ok medjutim ja bih upit doradio tako da mi izbaci samo drugi red na slici gde je zadnja cena 8.45. u ovom slucaju imam 4 reda a meni treba sa najmanjom zadnjom cenom osim nule. znam da bih mogao (da ne dobijam zadnju cenu izracunavanjem) da u WHERE uslovu ovog upita gadjam MIN ili podupitom. ali ovo je varijanta u kojoj ja formulom dolazim do zadnje cene i ne znam nacin kako doci do podatka.
[ bogdan.kecman @ 20.10.2014. 15:18 ] @
a koliko slogova hoces da ti upit vrati? 1 ili 3 ili 4 ?

ako zelis da ti vrati tacno prvi red iz tvog rezultata, tj da ti vrati te podatke iz onog reda gde je najmanja zadnja cena - na zalost mysql to ne ume :( za to ti treba pgsql posto bi ovde morao da radis group by i tu mysql moze da ti vrati min za taj tamo slog ali ove ostale slogove ako ne das agregatnu funkciju - prc, vraca "random" .. pgsql to ume da odradi

sa mysql bi mogao da radis join ili having a to je isti djavo onda da odradis i na klijentu :(
[ dusans @ 20.10.2014. 15:38 ] @
^ Jel MySql ne podržava ovakve upite na primer?

Code:

SELECT * FROM
(
     select (t1.procenat+t2.procenat) procenat,t1.broj_dana,t2.cena,
     t1.koef,round(t1.broj_dana*t1.koef/30,2) izr_koef,
     round(t2.cena-(t2.cena*((t1.procenat+t2.procenat)+round(t1.broj_dana*t1.koef/30,2))/100),2) as zadnja_cena
     from t1 left outer join t2 on t1.id=t2.id
) AS InnerQuery
ORDER BY zadnja_cena
LIMIT 1


Ili pak, zar ne može i ovako?
Code:

select (t1.procenat+t2.procenat) procenat,t1.broj_dana,t2.cena,
t1.koef,round(t1.broj_dana*t1.koef/30,2) izr_koef,
round(t2.cena-(t2.cena*((t1.procenat+t2.procenat)+round(t1.broj_dana*t1.koef/30,2))/100),2) as zadnja_cena
from t1 left outer join t2 on t1.id=t2.id
ORDER BY round(t2.cena-(t2.cena*((t1.procenat+t2.procenat)+round(t1.broj_dana*t1.koef/30,2))/100),2)
LIMIT 1
[ bogdan.kecman @ 20.10.2014. 15:50 ] @
:D podrzava, skroz mi je stao mozak, to ce naravno da radi .. nije bas
idealno ali sljaka

nego bas sad pisem nesto u pgsql-u i koristim njegove "window functions"
i nerviram se sto nema u mysql-u .. group-wise min/max i slicno ... i
onda naleti ovakvo pitanje i ja nastavim da se nerviram :(
[ dusans @ 20.10.2014. 15:57 ] @
Ma da :)
Ovo sam radio bar 100 puta u MS Sql-u i postoje bar još 3 druga načina da se ovo izvede,
a ne koristim MySql i ne znam sintaksu pa sam pitao, bilo bi glupo da neke trivijalne stvari ne mogu da se izvedu.
[ bogdan.kecman @ 20.10.2014. 16:00 ] @
i mssql ima min/max wise i window ako se dobro secam ... slabo njega
parlam od kad ga otese sybase-u