![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 7 Dołączył: 9.10.2007 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Posiadam tabele "presses" ID | USER_ID | TITLE | NUMBER | YEAR 1 | 5 | A | 6 | 2008 2 | 6 | A | 2 | 2009 3 | 6 | B | 3 | 2010 Chciałbym aby na wyjściu otrzymać czasopismo o ID 1 oraz 3 czyli tylko te najnowsze danego użytkownika.
Ale w wyniki ID mi się nie zgadzają bo otrzymuje ID | MAX(year) | MAX(number) 1 | 2008 | 6 2 | 2010 | 3 A powinno być 1 | 2008 | 6 3 | 2010 | 3 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
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 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:
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 Ten post edytował thek 22.01.2010, 20:41:46 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 17:07 |