web-dev-qa-db-fra.com

MySQL - en utilisant GROUP BY et DESC

Dans ma requête SQL, je sélectionne des données avec les clauses GROUP BY et ORDER BY . La table a la même numbers sur plusieurs lignes avec des heures différentes dans chaque ligne. Je pense donc que je veux appliquer une clause GROUP BY .

Cependant, dans les résultats, renvoient l'heure la plus ancienne avec le nombre, mais j'ai besoin de l'heure la plus récente.

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

La requête apparaît comme si elle devait d’abord appliquer GROUP BY puis ORDER BY ... mais les résultats ne semblent pas fonctionner de cette façon.

Est-ce qu'il y a un moyen de réparer ceci?

11
user1946705

la solution consiste à réécrire la requête en tant que:

SELECT * FROM (SELECT * FROM table ORDER BY time DESC) AS t GROUP BY numbers;
14
jbrond
SELECT * 
FROM table t
WHERE time = (
    SELECT max(time)
    FROM table
    WHERE t.numbers = numbers
)
17
Karolis
SELECT * FROM table
    WHERE time IN (
        SELECT MAX(time)
            FROM table
            GROUP BY numbers
    )
1
B. Bohdan

Selon le manuel, vous pouvez ajouter une liste à la liste des groupes: Exemple:
groupe par item1, item2 desc, item3

avec ou sans rollup.

J'ai essayé cela et cela fonctionne dans Ubuntu version 5.5.58. La page de référence est la suivante: https://dev.mysql.com/doc/refman/5.7/fr/group-by-modifiers.html

0
Betty Mock