Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/09/2011, 14h01   #1
Membre habitué
 
Inscription : novembre 2008
Messages : 238
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 238
Points : 120
Points : 120
Par défaut Problème sur group by

Bonjour,

Je cherche à identifier le dernier mouvement d'entrée en stock par article.
La table des mouvements d'entrée contient la date d'entrée en stock, l'id_article, l'id_mouvt_in et la référence.
Je parviens à remonter l'article et la date de validation par
Code :
1
2
3
4
 
SELECT m.id_article, max(m.date_validation)
FROM t_mouvt_in m
GROUP BY m.id_article
Je pourrais ensuite faire une requête qui utilise cette sous-requête pour remonter les informations mais il peut y avoir plusieurs mouvements d'entrée en stock dans la journée sur le même id_article. Aussi je souhaiterai également remonter l'id_mouvt_in.
J'ai consulté le didacticiel de F. BROUARD mais je ne trouve pas ce que je veux.
Merci d'avance.
Julien.
juju05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 14h34   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 641
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 641
Points : 2 634
Points : 2 634
Bonjour,

Vu que vous n'avez pas spécifié votre SGBD ...

solution universel :
Code :
1
2
3
4
5
6
 
SELECT t_in.id_mouvt_in, t_in.id_article, t_in.date_validation
FROM t_mouvt_in t_in
INNER JOIN (SELECT m.id_article, max(m.date_validation) AS date_validation
FROM t_mouvt_in m
GROUP BY m.id_article) t_in_bis ON t_in.id_article = t_in_bis.id_article AND t_in.date_validation = t_in_bis.date_validation
Et une solution sans jointure / group by qui ne marchera pas de partout :
Code :
1
2
3
4
5
6
7
8
9
 
WITH tmp AS (
SELECT id_mouvt_in, id_article, date_validation,
row_number() over(partition BY id_article ORDER BY date_validation DESC) AS rnk
FROM t_mouvt_in)
 
SELECT id_mouvt_in, id_article, date_validation 
FROM tmp
WHERE rnk = 1
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h25.


 
 
 
 
Partenaires

Hébergement Web