Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
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 12/07/2011, 15h58   #1
Membre habitué
 
Inscription : décembre 2007
Messages : 579
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2007
Messages : 579
Points : 114
Points : 114
Par défaut Jointure avec une table d'historique et sélection du plus récent

Bonjour à tous,

Imaginons que j'ai 3 tables sur SQL Server.
voici mes tables fictives (je ne peux pas donner les vrais noms de table je pense, c'est confidentiel. et les tables sont compliquées en plus ^^).

Article :
article_id, nom_article, prix...

Statut :
statut_id, nom_statut

Statut_Hist :
code_fsav_statut, statut_id, article_id, date_statut...

L’objectif est de sélection tous les articles, et leur statut le plus récent. Ouille, l'utilisation du GROUP BY sur SQL SERVER est plus compliquée que sur MySQL ^^
Je suis un peu perdu je l'avoue, pourriez-vous m'aider svp ?

Je continue mes recherches et mes tentatives, mais je dois rendre un résultat assez rapidement.

Merci.
thor76160 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2011, 16h11   #2
Membre habitué
 
Inscription : décembre 2007
Messages : 579
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2007
Messages : 579
Points : 114
Points : 114
ma requête actuelle :

Code :
1
2
3
4
5
6
 
SELECT a.article_id, sh.statut_id, sh.date_statut
FROM article AS a
INNER JOIN Statut_Hist AS sh ON sh.article_id = a.article_id
GROUP BY a.article_id, sh.statut_id, sh.date_statut
ORDER BY a.article_id DESC, sh.date_statut DESC
J'obtiens tous les articles, mais aussi tout l'historique de statut pour chacun d'entre eux. Il me faut le statut le plus récent de chacun... Je suis bloqué :/

Citation:
1342 1 2011-07-12 14:39:34.137
1341 6 2011-06-30 13:44:56.933
1341 5 2011-06-30 13:43:44.770
1341 4 2011-06-30 13:43:06.307
1341 3 2011-06-30 13:42:57.787
1341 2 2011-06-30 13:42:55.263
1341 3 2011-06-30 13:42:27.947
1341 2 2011-06-30 13:41:43.340
1341 1 2011-06-29 10:07:52.863
1340 1 2011-06-17 13:32:47.457
1339 1 2011-06-17 13:30:11.950
1338 1 2011-05-26 15:27:29.737
1337 6 2011-06-22 16:42:37.533
1337 5 2011-05-10 17:29:57.560
1337 4 2011-05-10 17:29:49.297
1337 3 2011-05-10 17:29:34.140
1337 2 2011-05-10 17:27:04.260
1337 1 2011-05-10 16:50:43.343
1335 6 2011-06-30 13:45:40.683
1335 5 2011-05-10 16:46:03.993
1335 4 2011-05-10 16:45:56.700
1335 3 2011-05-10 16:45:49.500
thor76160 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2011, 16h31   #3
Membre habitué
 
Inscription : décembre 2007
Messages : 579
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2007
Messages : 579
Points : 114
Points : 114
problème résolu :

Citation:
SELECT a.article_id, MAX(sh2.date_statut) AS date_statut2
FROM article AS a
INNER JOIN Statut_Hist AS sh ON sh.article_id = a.article_id
INNER JOIN Statut_Hist AS sh2 ON sh2.article_id = a.article_id
GROUP BY a.article_id
ORDER BY a.article_id DESC
ça marche comme je le voulais ^^
Merci quand même. en tout cas ce sera utile aux personnes passant par là et qui auront le même problème.
thor76160 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 11h07   #4
Membre habitué
 
Inscription : décembre 2007
Messages : 579
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2007
Messages : 579
Points : 114
Points : 114
problème non résolu, je me suis rendu compte que je ne peux pas obtenir le champ id_statut, que la date la plus récente >_<

Je relance donc le sujet, en espérant que certains pourront m'aider svp.
thor76160 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 11h36   #5
Membre habitué
 
Inscription : décembre 2007
Messages : 579
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : décembre 2007
Messages : 579
Points : 114
Points : 114
Voila, j'ai bien avancé. voici la base de me raquête SQL :

Code :
1
2
3
4
5
6
7
8
 
SELECT a.article_id, sh.code_fsav_statut, sh.statut_id, sh.date_statut
FROM article AS a
INNER JOIN Statut_Hist AS sh ON sh.article_id = a.article_id
INNER JOIN Statut_Hist AS sh2 ON sh2.article_id = a.article_id
GROUP BY a.article_id, sh.code_fsav_statut, sh.statut_id, sh.date_statut
HAVING sh.date_statut = MAX(sh2.date_statut)
ORDER BY a.article_id DESC
voila, j'espère n'avoir fait aucune erreur durant ma retranscription, en tout cas ça a l'air de fonctionner de mon coté
thor76160 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 06h37.


 
 
 
 
Partenaires

Hébergement Web