GROUP BY仅选择goup的第一行

时间:2018-04-04 11:10:21

标签: mysql sql phpmyadmin

我正在尝试构建一个获取数据库中所有行的查询,并按月和年对它们进行分组。但是,我只看到第一行被选中,而不是任何其他行。任何人都可以帮我解决这个问题吗?

SELECT `id` 
FROM `tickets` 
WHERE `category` = '1' 
GROUP BY DATE_FORMAT(date,'%Y-%m') DESC;

据我所知,这应该有用,但也许你们知道一些事情

- 编辑 -

基本上我试图创建像this这样的东西,但基于一年中的月份。我正在使用nova框架。

〜问候

4 个答案:

答案 0 :(得分:2)

我认为您需要ORDER BY,而不是GROUP BY

SELECT id
FROM tickets
WHERE category = '1' 
ORDER BY DATE_FORMAT(date, '%Y-%m') DESC;

GROUP BY正在完成它应该做的事情。它聚合数据,因此GROUP BY键的每个不同值在结果集中都有一行。

答案 1 :(得分:2)

然后你必须按ID分组。 查询必须如下所示:

SELECT `id` FROM `tickets` WHERE `category` = '1' GROUP BY DATE_FORMAT(date,'%Y-%m'),id DESC;

答案 2 :(得分:1)

如果你想要所有表的行而没有聚合,那么你可能需要的是ORDER BY子句:

SELECT `id`
FROM `tickets`
WHERE `category` = '1'
ORDER BY DATE_FORMAT(date,'%Y-%m') DESC;

答案 3 :(得分:0)

我认为你可以使用ORDER BY,但如果你真的想使用GROUP BY,那么你必须包含id,因为你还没有在聚合函数中使用它。 尚未汇总的所有选定列都必须包含在GROUP BY中 如果您没有任何汇总,您就不必使用GROUP BY,但如果您这样做,则必须遵守规则。