Я пытаюсь построить запрос, который получает все строки в базе данных и группирует их по месяцам и годам. Тем не менее, я вижу только первую выбранную строку, а не любую другую. Может ли кто-нибудь помочь мне исправить эту проблему?
SELECT 'id'
FROM 'tickets'
WHERE 'category' = '1'
GROUP BY DATE_FORMAT(date,'%Y-%m') DESC;
Насколько я знаю, это должно сработать, но, может быть, вы, ребята, знаете что-то
--РЕДАКТИРОВАТЬ--
Основном им пытаются создать что - то вроде этого, но основываясь на месяц года. Я использую nova framework.
~ Привет
Затем вам также нужно группировать по id. Запрос должен выглядеть следующим образом:
SELECT 'id' FROM 'tickets' WHERE 'category' = '1' GROUP BY DATE_FORMAT(date,'%Y-%m'),id DESC;
Я думаю, что вы хотите ORDER BY
, а не GROUP BY
:
SELECT id
FROM tickets
WHERE category = '1'
ORDER BY DATE_FORMAT(date, '%Y-%m') DESC;
GROUP BY
делает именно то, что он должен делать. Он объединяет данные, поэтому каждое отдельное значение ключей GROUP BY
имеет одну строку в результирующем наборе.
Если вы хотите, чтобы все строки таблицы без агрегации, то вам, вероятно, понадобится предложение ORDER BY
:
SELECT 'id'
FROM 'tickets'
WHERE 'category' = '1'
ORDER BY DATE_FORMAT(date,'%Y-%m') DESC;
Я думаю, что вы можете использовать ORDER BY
но если вы действительно хотите использовать GROUP BY
тогда вы должны также включать id
поскольку вы не использовали его в агрегированной функции. Все выбранные столбцы, которые не были агрегированы, должны быть включены в группу GROUP BY
Seeing, так как у вас нет каких-либо агрегатов, вам не нужно использовать GROUP BY, но если вы это делаете, вы должны следовать правилам.
DESC
:)GROUP BY
не помещает строки из таблицы в набор результатов, которые она производит. Он генерирует строки, которые он помещает в набор результатов, используя строки, считанные из таблицы. Для каждой группы генерируется один ряд.