MySQL - 使用GROUP BY和DESC

问题描述:

在我的SQL查询中,我选择的数据与GROUP BYORDER BY条款。该表在多行中具有相同的numbers,每行中具有不同的时间。所以我想我想申请GROUP BY条款。MySQL - 使用GROUP BY和DESC

然而,在结果返回与数字最古老的时间,但我需要最近的时间。

SELECT * FROM TABLE GROUP BY (numbers) ORDER BY time DESC 

查询看起来好像应该先申请GROUP BY然后ORDER BY ......但结果似乎并没有以这种方式工作。

有什么办法解决这个问题吗?

+3

[在文档](http://dev.mysql.com/doc/refman/5.6/en/group-by-hidden-columns.html)中,如果您选择未分组的列在每个组具有多个值的情况下显式调出为“不确定”。你不能依赖任何特定的行为。你需要整行还是'数字,最大值(时间)' –

+0

你能提供一些数据与你期望的结果吗? –

+0

谢谢你们,你让我朝着正确的方向前进。 – user1946705

解决办法是重新编写查询作为:

SELECT * FROM (SELECT * FROM table ORDER BY time DESC) AS t GROUP BY numbers; 
+3

P.S.这会导致性能下降 – jbrond

+4

理论上,你不能保证你总能得到相同的结果。 – Karolis

+1

@Karolis同意,你的答案似乎是更正确的 – feeela

SELECT * 
FROM table t 
WHERE time = (
    SELECT max(time) 
    FROM table 
    WHERE t.numbers = numbers 
) 

SELECT * FROM TABLE GROUP BY numbers DESC; 

这会给你从组最后一个记录。

由于

+0

这不能回答这个问题。他们想在分组之前订购。 –

据可以通过列表中添加递减到组中的手册: 示例:
组由ITEM1,ITEM2 DESC,项目3

具有或不汇总。

我试过这个,它在Ubuntu 5.5.58版本中有效。参考页面为: https://dev.mysql.com/doc/refman/5.7/en/group-by-modifiers.html