|
SQL - Sélection dernière date par type |
Débuté par Hacyrak, 31 juil. 2020 16:17 - 8 réponses |
| |
| | | |
|
| |
Posté le 31 juillet 2020 - 16:17 |
Bonjour, Voici mon problème j'ai une table stock qui contient une rubrique date, une rubrique heure, un type et un prix. Elle possède aussi une clé composé DateHeure
J'aimerai effectuer un requête me permettant d'obtenir, pour chaque type, la date / heure la plus récente, et le prix correspondant.
SELECT Stock.TypeMouvement, MAX(Stock.DateHeure) FROM Stock GROUP BY TypeMouvement //Ne fonctionne pas impossible d'effectuer un max sur une clé composée
SELECT Stock.TypeMouvement, MAX(Stock.DATE), MAX(Stock.Heure) FROM Stock GROUP BY TypeMouvement //Ne fonctionne pas obtiens la DATE et l'heure la plus récente mais pas la date heure
SELECT Stock.TypeMouvement AS TypeMouvement, Stock.DATE AS DateEntree, Stock.Heure AS HeureEntree, Stock.Prix AS Prix FROM Stock WHERE (TypeMouvement, DateEntree) IN ( SELECT Stock.TypeMouvement, MAX(Stock.DATE) FROM Stock GROUP BY TypeMouvement ) //(TypeMouvement, DateEntree) IN ne fonctionne pas avec windev
Merci d'avance, |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 143 messages Popularité : +50 (142 votes) |
|
Posté le 01 août 2020 - 10:36 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 143 messages Popularité : +50 (142 votes) |
|
Posté le 01 août 2020 - 10:36 |
| |
| |
| | | |
|
| | |
| |
Posté le 03 août 2020 - 09:15 |
Bonjour, Merci effectivement votre réponse doit fonctionner avec un order by date et heure. Cela règle la sélection de rubriques supplémentaire. Le problème qui survient avec l'utilisation de l'order by est de sélectionner pour chaque type de stock la date la plus récente (j'ai testé avec un union cela n'est pas la bonne réponse).
J'ai trouvé une autre solution avec le max. Il est possible de concaténer les 2 rubriques.
SELECT DISTINCT TypeMouvement, MAX(CONCAT(Stock.DATE,Stock.Heure)) FROM Stock GROUP BY TypeMouvement Ceci me renvoie pour mes 3 types de stock la dateheure la plus récente. Il me reste plus qu'à voir comment ajouter le prix sans qu'il soit dans le group by et dans le distinct, ce qui n'est pas encore gagné. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 93 messages Popularité : +1 (1 vote) |
|
Posté le 03 août 2020 - 12:52 |
Peut-être que tu peux faire cela:
SELECT * FROM Stock WHERE CONCAT(TypeMouvement, CONCAT(Stock.DATE,Stock.Heure)) IN ( SELECT CONCAT(TypeMouvement, MaxDH) FROM ( SELECT CONCAT(TypeMouvement, MAX(CONCAT(Stock.DATE,Stock.Heure)) AS MaxDH FROM Stock GROUP BY TypeMouvement ) ) |
| |
| |
| | | |
|
| | |
| |
Posté le 03 août 2020 - 14:49 |
Effectivement cela fonctionne. Merci. Il y a juste une petite erreur dans le code partager :
SELECT CONCAT(TypeMouvement, MAX(CONCAT(Stock.DATE,Stock.Heure)) AS MaxDH FROM Stock GROUP BY TypeMouvement On ne peut pas utiliser de fonction agrégats dans le CONCAT.
Voici le code fonctionnel :
SELECT * FROM Stock WHERE CONCAT(TypeMouvement, CONCAT(Stock.DATE,Stock.Heure)) IN ( SELECT CONCAT(TypeMouvement, MaxDH) FROM ( SELECT TypeMouvement, MAX(CONCAT(Stock.DATE,Stock.Heure)) AS MaxDH FROM Stock GROUP BY TypeMouvement ) ) |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 93 messages Popularité : +1 (1 vote) |
|
Posté le 03 août 2020 - 15:06 |
Merci.
J'avais un peu tapé à l'aveugle.
Par contre, en essayant sur un de mes fichiers avec une requête similaire j'ai eu erreur bizarre:
Erreur renvoyée par le serveur <localhost:4900> : Aucune analyse n'est ouverte et le fichier <ENTVTE> n'a pas été décrit.
Voicl la requête:
SELECT * FROM ENTVTE WHERE CONCAT(ENTYP, ENDAT) IN ( SELECT CONCAT(ENTYP, MaxDat) FROM ( SELECT ENTYP, MAX(ENDAT) AS MaxDat FROM ENTVTE GROUP BY ENTYP ) ) |
| |
| |
| | | |
|
| | |
| |
Posté le 03 août 2020 - 15:24 |
Oui c'est étrange cette erreur. La requête ne semble pas voir la base associé au projet. Un problème de connexion ?
Si vous faite une requête simple de type :
SELECT * FROM ENTVTE
Vous avez le même message d'erreur ? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 93 messages Popularité : +1 (1 vote) |
|
Posté le 03 août 2020 - 16:00 |
Non pas d'erreur. Encore un bug HyperFile ou du centre de contrôle. Je vais pas chercher plus loin... |
| |
| |
| | | |
|
| | | | |
| | |
|