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/02/2011, 12h22   #1
Membre actif
 
Avatar de Empty_body
 
Inscription : mai 2004
Messages : 679
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 679
Points : 186
Points : 186
Par défaut Problème avec une where clause.

Salut,

Dans une table d'une base de donnée sur laquelle je m'appuie contient une table historisée assez mal pensée. La table se présente de la manière suivante :
code,article, description, prix, id2

Lorsqu'une info est mise à jour, la ligne est recopie, le code n'est jamais mis à jour, l'article-description-prix le sont et l'id2 est une séquence. J'aimerais récupérer la dernière version de tous les article.

Une idée de comment faire la where clause?
__________________
Pourquoi vouloir ré-inventer la roue...
...Surtout si c'est pour la faire carrée...
Empty_body est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 13h40   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 950
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 950
Points : 17 769
Points : 17 769
Qu'appelez vous une séquence ? Une auto référence, pas exemple version 6 dépend de version 2 qui dépend de version 1 ?
Si tel est le cas il faut faire des requêtes récursives.
Voyez l'article que j'ai écrit à ce sujet : http://sqlpro.developpez.com/cours/s...te-recursives/
Si vous êtes sous MySQL, c'est mort, son SQL retarde de plus de 10 ans !

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 14h44   #3
Membre actif
 
Avatar de Empty_body
 
Inscription : mai 2004
Messages : 679
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 679
Points : 186
Points : 186
bonjour,

Je travaille sous postgres et il s'agit effectivement d'une auto référence, je vais regarder à votre tuto, merci.

Comme exemple, voici ce que je peux trouver :

code | article | prix | description | id2

AAA | article1 | 123 | desc de l'article 1 | 1
AAA | article1 | 124 | desc de l'article 1 | 2
BBB | article2 | 234 | desc de l'article 2 | 3
AAA | article1 | 125 | desc de l'article 1 | 4

J'aimerais récupérer :

BBB | article2 | 234 | desc de l'article 2 | 3
AAA | article1 | 125 | desc de l'article 1 | 4
__________________
Pourquoi vouloir ré-inventer la roue...
...Surtout si c'est pour la faire carrée...
Empty_body est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 15h25   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 990
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 990
Points : 18 241
Points : 18 241
Envoyer un message via MSN à CinePhil
Donc tu veux le MAX(id2) de chaque code ?
Code :
1
2
3
SELECT code, MAX(id2) AS id2
FROM la_table
GROUP BY code
Si tu veux les autres colonnes, il faut faire une jointure de la table avec cette requête :
Code :
1
2
3
4
5
6
7
8
9
10
11
SELECT a.code, a.article, a.prix, a.description, a.id2
FROM la_table a
INNER JOIN
(
    SELECT code, MAX(id2) AS id2
    FROM la_table
    GROUP BY code
) tmp 
    ON tmp.code = a.code
    AND tmp.id2 = a.id2
ORDER BY a.code
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h32.


 
 
 
 
Partenaires

Hébergement Web