použít funkci max(date) v subselectu jsi zkusil?
použít funkci max(date) v subselectu jsi zkusil?
Gigabyte GA-MA78G-DS3H, Athlon 64 X2 5050+, 6GB RAM, 2X WD6400AAKS 640GB, integrovaný zvuk i grafika, zdroj SEASONIC S12-550 Energy+, AverTV DVB-T Volar X, Samsung SH-203B, Logitech MX-518
And down we go again, under the relentless wawes, into the arms of calm breakers, into bayou of forgotten dreams
Like sand slipping through my fingers, nothing ever lasts, ever will
Hele a co takhle tu druhou podmiku presunout do where ?
select * from A
join B on A.id = B.id
where SUBSTRING(A.datum,1,10)>=B.datum
IMPROBE AMOR, QUID NON MORTALIA PECTORA COGIS - krutá jsi, lásko, kam až ty doženeš smrtelná srdce -- Vergilius
Mnoho je prostředků, které léčí lásku, ale žádný není spolehlivý.
S tím, čeho se na nás dopustili druzí se už nějak vyrovnáme. Horší je to s tím, čeho jsme se na sobě dopustili sami. -- Francois La Rochefoucauld
Nabídnout přátelství tomu, kdo chce lásku, je jako dát chleba tomu, kdo umírá žízní.
V principu identicky problem jsme resili v praci, a dosli jsme k zaveru,ze to nema reseni v ramci jednoho sql dotazu. Resilo se to aplikacne. Bohuzel. Kdybyste nasli reseni, nasypu si popel na hlavu, a sproste ho ukradnu
EDIT: nakonec si vzpominam, ze to nebylo reseny aplikacne, ale redundatnim bitem v DB, ktery u tech nejnovejsich radku rikal, ze je nejnovejsi. Updaty se delaly malo, tak to slo vykonove ukocirovat. Samozrejme je to prasecina..
Naposledy upravil KtK; 15.01.2010 v 14:23.
Parasite lost, AKA the Girlfriend Mission:The Socka Project sleeps, lets use (her :) Durex! 1GHz in some soltek stuff, Ati rage 128, etc.. (it\'s noisy)
IMB Thinkpad R31: celer 1.2GHz, 384M RAM, 60GB 5400rpm hitachi, i810 8MB onboard (na praci to staci ;)
[pro archivni ucely] janina overclockerska poradna (.tar.gz, 1.1MB, otevrete si index.html v browseru podporujicim javascript a frames)
KtK:
Tak ono to moze byt kludne barsaky konsky vnoreny SELECT, nebranim sa tomu. Proste to nechcem riesit na aplikacnej urovni, lebo ked tam budu desat-sta tisice poloziek, tak sa mozem posrat...
Ja som vyhutal iba toto:
SELECT X.id, X.datum, X.datum2, X.hodnota, X.id2
FROM A
LEFT JOIN (
SELECT A.id, A.datum, B.datum AS datum2, B.hodnota, B.id2
FROM A
LEFT JOIN B ON A.id2 = B.id2
AND CAST( A.datum AS DATE ) >= B.datum
ORDER BY B.datum DESC
) AS X ON X.datum = A.datum
GROUP BY X.id
ORDER BY NULL
Co sa sice tvari funkcne, ale prave kvoli tomu GROUP BY sa mi to velmi velmi velmi moc nepaci.
[edit]
Jezevec:
To Tvoje riesenie ma hacik v tom, ze v pripade, ze v B je viac moznosti vyhovujucich podmienke >=, tak to vrati kopec veci. Navyse nemas to nijako sortovane, takze ani nevies, ktora hodnota je pre Teba relevantna (teda... vies... najvyssia pre dane A.id, ale ono ti to nevyhodi v poradi a vyhodi ti ich vsetky)
Naposledy upravil PiT; 15.01.2010 v 11:20.
And down we go again, under the relentless wawes, into the arms of calm breakers, into bayou of forgotten dreams
Like sand slipping through my fingers, nothing ever lasts, ever will
How about this:
Inak ako sam hovoris je to maly zazrak ze to Tvoje riesenie dava spravny vysledok pre tento specificky dataset. Ono uz len ten sort v tom vonkajsom left joine je v podstate zbytocny kedze poradie records nebude garantovane vo vysledku joinu... i ked v tomto pripade to "funguje".Kód:SELECT a.*, b.* FROM a JOIN ( SELECT a.id, MAX(b.datum) AS datum FROM a LEFT JOIN b ON (b.id2 = a.id2 AND a.datum >= b.datum) GROUP BY a.id ) temp ON (temp.id = a.id) LEFT JOIN b ON (b.id2 = a.id2 AND b.datum = temp.datum);
Intel Core 2 Duo E6600 @ 3.2GHz (8 * 400MHz) @ 1.3V with Zalman CNPS9500 AT @ 1800RPM, ASUS P5B Deluxe/WiFi, 2x1GB Corsair Twin2X PC2-6400 DDRAM @ 400MHz (4-4-4-12) @ 2.1V, Leadtek 8800GT 512MB, WD Caviar SE16 250GB, Asus DRW-1608P3S, Creative SB Audigy Value, Logitech X-230 speakers, Enermax Liberty 400W, 2x120mm Thermaltake case fan @ 1800RPM, Thermaltake Aguila black case, HP LP2065 LCD, Logitech MX400
Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)