Einträge nach aktuellem Jahr auswählen

Ich habe eine Tabelle in der Form

uid name jahr
1 bla 2006
2 blub 2006
3 bla 2007

und ich will von bla und von blub die jeweils „aktuellsten“ Zeilen haben, also die wo das feld „jahr“ dem aktuellen Jahr am nächsten kommt.

Ich setze MySQL 4.1 ein, sonst hätte ich es mit einer VIEW gelöst :frowning:

recht schäbige Lösung, gibts was besseres?
Also ich hab mir jetzt mal UNION zu gemüte geführt und folgendes gebastelt:

(SELECT uid, cid, current_year FROM table WHERE cid NOT IN (SELECT cid FROM table WHERE current_year = 2007)) UNION (SELECT uid, cid, current_year FROM table WHERE uid NOT IN (SELECT uid FROM table WHERE current_year = 2006)) ORDER BY current_year DESC

Naja und jedes Jahr muß man halt noch per union dranhängen (und die subquerys anpassen). Aber ich finde der Query sieht nach verdammt viel arbeit für die DB aus (bei 10.000 Zeilen in der db dauert der query auch gleich 0.3 sekunden), gibt es da keine elegantere Lösung?

*hüstel* ich hab Sauerstoffmangel im Hirn
… oder zuviel Kaffee im Blut. Diese Subquery Orgie kann man einfach wegwerfen und hat ein besseres Ergebnis…

(SELECT uid, cid, current_year FROM table WHERE current_year = 2007) UNION (SELECT uid, cid, current_year FROM table WHERE current_year != 2007) ORDER BY current_year DESC

execution time auf 0.1 gesunken, das sieht schon besser aus.

Hi!

Ich würde es (unter Oracle) so lösen:

select \*
 from table t1
 where current\_year = (select max(current\_year)
 from table t2
 where t1.name = t2.name)

So bist Du dem aktuellstem Jahr ohne Hardcodierungen am Nächsten

Grüße,
Tomh

PS: Trotzdem werde ich das Gefühl nicht los, das hier irgendwo noch ein Denkfehler meinerseits drinnen liegt …

kein Denkfehler, funzt prima
Passt perfekt auch unter MySQL, rennt auch mit 0.1 sec durch.
Vielen vielen Dank!

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]