Zdravim vospolok.
Pri robeni jednej webovej aplikacie som narazil na zdanlivo velmi jednoduchy problem, ktory som sice vyriesil (nemam to este natestovane, takze neviem, ci je to 100%ne funkcne riesenie), no neviem si s nim celkovo nejako elegantne/jednoznacne rady.
Majme
Tabulka A: id; datum; id2
1; 2009-12-17 10:12:00; 3
2; 2010-01-13 12:14:00; 14
3; 2009-01-13 14:02:44; 3
4; 2009-07-05 12:00:00; 20
5; 2009-07-05 12:00:00; 12
6; 2009-08-01 14:00:00; 20
Tabulka B: id, datum; id2; hodnota
1; 2008-10-01; 3; 3000
2; 2009-01-01; 3; 800
3; 2009-07-13; 3; 500
4; 2009-07-26; 3; 300
9; 2008-04-01; 12; 7500
10; 2008-10-21; 14; 5000
20; 2009-07-01; 20; 500
21; 2009-07-26; 20; 300
Potrebujem spravit JOIN Tab B na Tab A s tym, ze vysledok bude relevantna hodnota pre dany datum.
V JOINe teda operujem s A.id=B.id AND SUBSTRING(A.datum,1,10)>=B.datum
Tzn vysledok by mal vyzerat takto dajako:
A.id; A.datum; B.datum; A/B.id2; B.hodnota
1; 2009-12-17 10:12:00; 2009-07-26; 3; 300
2; 2010-01-13 12:14:00; 2008-10-21; 14; 5000
3; 2009-01-13 14:02:44; 2009-01-01; 3; 800
4; 2009-07-05 12:00:00; 2009-07-01; 20; 500
5; 2009-07-05 12:00:00; 2008-04-01; 12; 7500
6; 2009-08-01 14:00:00; 2009-07-26; 20; 300
Haluz je prave ta druha podmienka, s ktorou operujem => A.datum>=B.datum (resp. SUBSTRING(A.datum,1,10)>=B.datum, lebo A.datum je datetime, B.datum je date, ale to je irelevantne)
pretoze logicky ak mam v Tab B starsie hodnoty pre jedno ID2, tak pre nu vyhovuje viac riadkov. Ja potrebujem vzdy posledny zadany (tzn. s poslednym datumom).
Nejaky napad ako to elegantne vyriesit? LIMIT 1 pouzit neviem, ci mozem, sam som to vyriesil s vnorenymi join selectami, kde som to najprv ORDERol, potom GROUPol ale GROUP pouzivam tentokrat velmi nerad, lebo GROUPujem podla A.id a spolieham na to, ze zachova vzdy prvu B.hodnota![]()