1

想象一下下面的 MySQL 订单表:

id | name
1  | Mike
2  | Steve
3  | Janet
4  | Juliet
5  | Mike
6  | Jane

这是我当前的查询:

SELECT * FROM table ORDER BY id DESC

但是,我想将这些按“分组” name,以便我有来自同一个人的订单一个接一个地列出,但是,我不能做 ORDER BY name

这是我想要的输出:

id | name
6  | Jane
5  | Mike
1  | Mike
4  | Juliet
3  | Janet
2  | Steve

这个输出的查询是什么?

4

6 回答 6

3

例如:

SELECT y.id
     , y.name  
  FROM my_table x 
  JOIN my_table y 
    ON y.name = x.name 
 GROUP 
    BY name
     , id 
 ORDER 
    BY MAX(x.id) DESC
     , id DESC;
于 2013-08-27T09:05:55.067 回答
2

您需要进行特殊计算才能获得他们的行位置。

SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT  Name, 
                    @ord := @ord + 1 ord
            FROM        
                    (
                        SELECT  MAX(ID) ID, NAME
                        FROM    TableName 
                        GROUP   BY Name
                    ) a, (SELECT @ord := 0) b
            ORDER   BY ID DESC
        ) b ON a.Name = b.Name
ORDER   BY b.ord, a.ID DESC
于 2013-08-27T09:02:16.403 回答
1

你可以通过 double 做到这一点ORDER BY

SELECT * FROM t ORDER BY name ASC, id DESC
于 2013-08-27T08:52:32.443 回答
0
SELECT * FROM table1 
ORDER BY field(NAME,'Mike','Jane') desc,
`ID` desc;

正如你所问

于 2013-08-27T08:57:08.823 回答
0

如果您想要更通用的 SQL,您也可以尝试此查询。

SELECT id, name 
FROM ( SELECT id, name, (SELECT MAX(id) from Table1 where name=t.name) AS max_id 
     FROM Table1 AS t 
     ORDER BY max_id DESC, id DESC) as x
于 2013-08-27T09:06:40.800 回答
-1

如何使用group by?您可以按名称对其进行分组,然后订购...

于 2013-08-27T09:01:45.277 回答