i-orMedlem sedan nov. 2001294 inlägg SQL = "SELECT f_runner, Max(f_date) AS f_date, f_type FROM t_diaryworkouts WHERE CURRENT_DATE - f_date < 3 GROUP BY f_runner ORDER BY f_date DESC"
Denna kod generar alla poster, där datumet (f_date) är mindre än tre dagar gammalt och bara en post per användare (f_runner). Så långt fungerar allt som det ska.
Men om flera f_date finns med samma f_runner i denna tidsperiod väljs f_type efter lägsta id-numret. Jag vill att f_type med det högsta id-numret ska genereras.
Hoppas att ni hänger med i min tankegång och kan lösa mitt problem.
Tack på förhand
LarsGMedlem sedan dec. 200012 464 inlägg Det går inte att åstadkomma i en fråga med Mysql. Det behövs subselect.
Enklast är att skapa en temptabell och fylla den med id
insert into temp select max(id) , f_runner
from t_diaryworkouts
WHERE CURRENT_DATE - f_date < 3
GROUP BY f_runner
select t_diaryworkouts.*
from t_diaryworkouts inner join temp
on temp.id = t_diaryworkouts.id
[Utläggning om mysqls korkade implementation av group by]
Grunden för group by är att alla kolumner i group by antingen ingår i en aggregatfunktion (max,min etc) eller att den är med i select-listan. Det gör det inte i din fråga och normalt sett (dvs om man inte använt Mysql) så skulle man få fel om man ställer en sådan fråga. Mysql gör så att man får något icke förutsägbart värde från de kolumner som inte ingår i group by. De dokumenterar det till och med som en feature.
[/Utläggning]