Ponieważ grupowanie następuje szybciej to tak się dzieje. Użycie klauzuli max zafałszuje wyniki ponieważ wybiera maksymalną wartość olewając resztę. Co z tego, że dając max(year) uzyskasz największą wartość roku, skoro reszta danych będzie nie pasująca do rekordu?
Nawet jeśli uzyskasz 2010 jako rok, to number nadal będzie równe 2. Wziąłem i przykład Twój wrzuciłem do bazy i zapytanie
SELECT id, user_id, title, max( number ), max( years ) FROM pressess GROUP BY user_id
zwróciło mi
1 5 A 6 2008
2 6 A 3 2010
a to jest pomieszanie z poplątaniem o jakim Ci pisałem. Bo wrzuciło z pierwszego pasującego 6 oraz A, ale już potem walnęło max dla number i dla years.
Inna sprawa, że year to słowo zarezerwowane i nie powinno się go używać jako nazwa kolumny. Stąd masz byka i dlatego między innymi nie wyświetla prawidłowo. Albo wtedy używasz innej nazwy kolumny (co zrobiłem ja), albo używasz odwróconych apostrofów, czyli takiego zapisu -> `year`.
Aby zrobić to co Ty chcesz należałoby najpierw posortować rekordy po roku a dopiero potem grupować. To zaś najprościej wykonać poprzez poslanie sortowania do podzapytania w ten sposób:
SELECT s.id, s.number, s.years FROM (SELECT id, user_id, years, number FROM users ORDER BY years DESC) s GROUP BY s.user_id
EDIT. Jeśli w tym roku ma kilka czasopism to w podzapytaniu jeszcze ORDER BY zmień dorzucając kolejny fragment i tworząc:
ORDER BY years DESC, number DESC