sql obtenir ligne avec max date et relative de l'enregistrement de l'id
J'essaie de faire une requête simple, passé sur un ton des heures et rien....
Tout ce que je besoin est d'obtenir un MAX de la date et de tous est champs correspondants.
Je vais expliquer:
J'ai une table avec ce champs: BasketID
, OrderStatusTypeID
, StatusDate
.
J'essaie d'obtenir qu'un seul enregistrement qui contiennent OrderStatusTypeID
valeur avec la dernière StatusDate
.
C'est les données
BasketID OrderStatusTypeID date
1111 13 2013-04-01 11:38:31
1111 26 2013-04-04 17:44:17
1111 39 2013-04-02 12:35:07
1111 40 2013-04-08 12:52:55
C'est ma requête:
SELECT BasketID, OrderStatusTypeID, max(StatusDate) date
FROM st
where BasketID=1111
group by BasketID
C'est les résultats que j'ai besoin
BasketID OrderStatusTypeID date
63558 40 2013-04-08 12:52:55
Pour une raison que je ne reçois OrderStatusTypeID = 13
et pas 40
!
(max de StatusDate, et PAS max de OrderStatusTypeID).
Pourquoi???
BasketID OrderStatusTypeID date
63558 13 2013-04-08 12:52:55
Merci pour la réponse rapide!
Votre requête n'a même pas compiler. Quel est votre SGBD?
Je pense que vous pouvez le faire par
choisissez la réponse correcte s'il vous plaît... il permettra à d'autres aussi
Je pense que vous pouvez le faire par
SELECT TOP 1 * From Table ORDER BY date DESC
choisissez la réponse correcte s'il vous plaît... il permettra à d'autres aussi
OriginalL'auteur user2261793 | 2013-04-09
Vous devez vous connecter pour publier un commentaire.
Je suppose que vous êtes en utilisant
MySQL
parce que vous pouvez exécuter la requête, même si vous n'avez pas spécifié, tous les non-colonne d'agrégation dans leGROUP BY
clause.Il existe de nombreuses façons de résoudre le problème mais j'ai l'habitude de faire de cette façon. La requête utilise une sous-requête qui séparément obtient la dernière
date
pour chaqueBasketID
. Depuis la sous-requête a renvoyé deux colonnes, vous devez rejoindre la remettre sur la table elle-même pour obtenir les autres colonnes à condition que ce match sur deux colonnes:BasketID
,Date
.Votre requête a été exécutée avec succès, sans jeter une exception, même si il y a des non-agréger les colonnes qui ne sont pas spécifiés dans la
GROUP BY
clause parce que c'est permis dans MySQL. Voir Extensions MySQL de GROUPE PAR.vous êtes les bienvenus
:D
OriginalL'auteur John Woo
Je sais que c'est un vieux thread, mais
pourquoi n'est-il pas possible d'utiliser ORDER BY et LIMIT dans ce cas?
Une requête comme ça:
SELECT * from st
OÙ BasketID=1111
ORDER BY Date DESC
LIMITE de 1
OriginalL'auteur Alan Smith
Son très facile à utiliser la commande TOP (comme:
OriginalL'auteur Syed Arbaz AHmed Kirmani