我正在尝试构建一个获取数据库中所有行的查询,并按月和年对它们进行分组。但是,我只看到第一行被选中,而不是任何其他行。任何人都可以帮我解决这个问题吗?
SELECT `id`
FROM `tickets`
WHERE `category` = '1'
GROUP BY DATE_FORMAT(date,'%Y-%m') DESC;
据我所知,这应该有用,但也许你们知道一些事情
- 编辑 -
基本上我试图创建像this这样的东西,但基于一年中的月份。我正在使用nova框架。
〜问候
答案 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,但如果您这样做,则必须遵守规则。