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 に答える
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 に答える
0
SELECT * FROM table1 
ORDER BY field(NAME,'Mike','Jane') desc,
`ID` desc;

まさにあなたが尋ねたように

于 2013-08-27T08:57:08.823 に答える
-1

group byを使用するにはどうすればよいでしょうか。名前でグループ化してから注文できます...

于 2013-08-27T09:01:45.277 に答える