Вие можете използвайте GROUP BY
, но е важно да разберете как работи.
Когато използвате GROUP BY
група от редове се свива в един и какво се показва в другите колони, които не се използват във вашето GROUP BY
клауза, се определя или чрез използване на агрегатни функции, или е произволен ред от тази група. Не можете да сте сигурни, че ще получите реда, съответстващ на показания ред, съдържащ MAX()
стойност или каквато и агрегатна функция да сте използвали. Това става особено очевидно, когато правите заявка като:
SELECT id, MIN(whatever), MAX(whatever), another_column
FROM your_table
GROUP BY id
„Another_column“ може да принадлежи към реда, съдържащ стойността MIN() или стойността MAX(), или дори към друг ред, който изобщо не се показва. В други RDBMS различни от MySQL всъщност е забранено да се избират колони, които не използват агрегатна функция или не са изброени в GROUP BY
клауза, само за да се предотврати това потребителите да направят грешка или да мислят, че са получили правилния резултат.
Така че във вашия случай изглежда искате да покажете и колоната "стойност". Поради горните причини отговорът на juergen_d е грешен, защото не избира „стойност“ и ако го направи, не можете да сте сигурни, че е правилната „стойност“. Отговорът на Филипе Силва е грешен, защото се групира по „стойност“. Правейки това във вашия случай всъщност ще върне цялата таблица. Отговорът на Ромеш е грешен, защото използва два пъти MAX()
ще ви даде максималните стойности, очевидно, но не и стойността, съответстваща на стойността за дата и час.
И така, как трябва да го направите? Тук са описани 3 начина . Научете ги, като ги прилагате сами. Не е толкова трудно :)