Sziasztok,
A következő a kollégám problémája, amit nem tud megoldani:
Egy sorban van 4 dátummező. Ebből kellene kiválasztani a legkisebb dátumot és ez alapján kellene rendeznie úgy, hogy csak a valódi dátumot veszi figyelembe. pl. a 0000-00-00 ne vegye figyelembe. A szerver 5.0.32.
Tudna valaki ehhez egy jó 5letet?
Köszi,
Szabek és Pisti
- 1067 megtekintés
Hozzászólások
Tehát
1) megnézni, melyik oszlopban van a legkisebb dátum
2) azon oszlop alapján rendezni, de a 0000-00-00 -os sorokat kihagyni?
SELECT MIN( a ) , MIN( b ) , MIN( c ) , MIN( d ) FROM `tabla1`
e négyből legkisebbet, majd:
sprintf(sün, "SELECT * FROM tabla1 WHERE %s != 0000-00-00 ORDER BY %s", mező, mező);
Csak ezem van sajnos:
"Szerver verzió: 5.1.36-community-log"
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
Szia,
Köszi a gyors választ, de ez nem igazán az, ami kellene.
Ami a kollégának kellene, az valahogy így néz ki:
id,datum1,datum2,datum3,datum4
1,2010-06-21, 2010-12-31, 2010-10-10, 0000-00-00
2,2008-12-31, 2012-12-31, 0000-00-00, 2009-12-31
3,2014-12-31, 2009-10-31, 2010-05-10, 2010-12-31
ez alapján a sorrend: 2 (2008-12-31), 3 (2009-10-31), 1 (2010-06-21)
Szóval valami hasonló kellene...
Köszi,
Sz. + P.
- A hozzászóláshoz be kell jelentkezni
select least(1,2,3);
t
- A hozzászóláshoz be kell jelentkezni
Szerintem a legkisebb dátumot _tartalmazó oszlop_ alapján akarnak rendezni.
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
"Egy sorban van 4 dátummező. Ebből kellene kiválasztani a legkisebb dátumot"
t
- A hozzászóláshoz be kell jelentkezni
select id, min_d
from (
select id, least(datum1,datum2,datum3,datum4) as min_d
from tbl
) t
order by min_d asc
- A hozzászóláshoz be kell jelentkezni
select
id, least(datum1, datum2, datum3, datum4) as min_d
from tbl
order by min_d asc
t
- A hozzászóláshoz be kell jelentkezni
No igen, sokkal inkább így.
- A hozzászóláshoz be kell jelentkezni
Igen, csak ezzel az a baj, h a least(2010-01-01,0000-00-00) ennek az eredménye 0000-00-00 és ez alapján nem tud rendezni...
- A hozzászóláshoz be kell jelentkezni
CASE használatával valahogy így:
case when datum1 = '0000-00-00'
then '9999-12-31'
else datum1
end
De lentebb van egy sokkal jobb if-es megoldás is.
- A hozzászóláshoz be kell jelentkezni
nem szep, de legalabb csunya es lassu:)
SELECT
IF(
a>'0000-00-00' AND a<b AND a<c AND a<d,
a,
IF(
b>'0000-00-00' AND b<c AND b<d,
b,
IF(
c>'0000-00-00' AND c<d,
c,
d
)
)
)
AS datum
FROM teszt
ORDER BY datum
- A hozzászóláshoz be kell jelentkezni
select id, least(if(datum1='0000-00-0','9999-00-9',datum1), etc...
es igy a 0000-t is kezeli. persze kiveve ha mind a 4 az :-)
- A hozzászóláshoz be kell jelentkezni
Köszönjük a megoldásokat! THavoc megoldása lett a nyerő. Köszi még1xer.
- A hozzászóláshoz be kell jelentkezni