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 13/07/2011, 15h45   #1
Invité de passage
 
Homme
Développeur Web
Inscription : juillet 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Service public

Informations forums :
Inscription : juillet 2011
Messages : 6
Points : 0
Points : 0
Par défaut top 2 par clé composée mysql

Bonjour,



J'ai la structure suivante :

idArticle date id
1 2011/07/13 511
2 2011/07/12 512
2 2011/07/11 513
1 2011/07/10 514
1 2011/07/09 515
2 2011/07/08 516


Et je cherche une requête qui m'afficherait les 2 id les plus récentes par idArticle unique, de cette manière :

idArticle date id
1 2011/07/13 511
1 2011/07/10 514

2 2011/07/12 512
2 2011/07/11 513

Merci d'avance.
fabrice1987 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 15h46   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
Bonjour,

quel est votre SGBD ?
qu'avez vous essayé comme requête ?
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 15h51   #3
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
Bonjour,

Inspirez-vous de la solution présentée dans les codes sources MySQL : http://mysql.developpez.com/telechar...aque-categorie
Voir également la discussion suivante, en adaptant la première des 2 solutions proposées au final : http://www.developpez.net/forums/d10...ture-distinct/
Il faut remplacer le < 1 final par < 2 dans votre cas.
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 15h54   #4
Invité de passage
 
Homme
Développeur Web
Inscription : juillet 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Service public

Informations forums :
Inscription : juillet 2011
Messages : 6
Points : 0
Points : 0
Le sgbd est MySQL. Je regarde vos liens.
Merci d'avoir répondu si rapidement
fabrice1987 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 16h18   #5
Invité de passage
 
Homme
Développeur Web
Inscription : juillet 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Service public

Informations forums :
Inscription : juillet 2011
Messages : 6
Points : 0
Points : 0
Si j'ai bien compris, pour l'adapter a mon cas où il n'y a qu'une seule table je dois utiliser la requête de cette façon :

Code :
1
2
SELECT v1.date, v1.idArticle FROM matable v1
WHERE (	SELECT COUNT(*)	FROM matable v2 WHERE v1.date > v2.date) < 2
Le résultat que j'obtiens correspond à un order by date DESC et LIMIT 0,3.

Ou ai-je fais une erreur ?
fabrice1987 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 16h27   #6
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
C'est normal il vous manque une jointure sur l'article_id dans votre sous requete.
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 16h54   #7
Invité de passage
 
Homme
Développeur Web
Inscription : juillet 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Service public

Informations forums :
Inscription : juillet 2011
Messages : 6
Points : 0
Points : 0
J'ai effectivement rajouté cette condition mais ça ne me renvoie pas les 2 premiers mais les 2 derniers. J'ai alors essayé de changer le signe de l'inégalité comme c'est expliqué sur le premier lien mais dans ce cas là les résultats ne correspondent plus du tout. Je ne suis plus sûr d'être sur la bonne voie.

Code :
1
2
SELECT v1.date, v1.idArticle FROM resultats v1 
WHERE (	SELECT COUNT(*)	FROM resultats v2 WHERE v2.idArticle = v1.idArticle AND v2.date < v1.date) < 2
En tout cas merci pour votre réponse.
fabrice1987 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 16h59   #8
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
Pouvez-vous poster la requête qui vous renvoie des résultats incohérent ?
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 17h01   #9
Invité de passage
 
Homme
Développeur Web
Inscription : juillet 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Service public

Informations forums :
Inscription : juillet 2011
Messages : 6
Points : 0
Points : 0
Voici la requête

Code :
1
2
SELECT v1.date, v1.idArticle FROM resultats v1 
WHERE (	SELECT COUNT(*)	FROM resultats v2 WHERE v2.idArticle = v1.idArticle AND v2.date > v1.date) < 2
Elle ne me renvoie plus les 2 lignes pour chaque idArticle
fabrice1987 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 17h06   #10
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
Avec le jeu de données que vous nous avez passé, pour moi, ça fonctionne .
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 17h29   #11
Invité de passage
 
Homme
Développeur Web
Inscription : juillet 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Service public

Informations forums :
Inscription : juillet 2011
Messages : 6
Points : 0
Points : 0

J'avais des dates identiques...
Je les ai changées et ça marche.

Merci beaucoup !!
fabrice1987 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 17h58   #12
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
Avec des dates identiques, ça peut fonctionner également, mais il faut un critère supplémentaire dans la sélection des 2 lignes pour y arriver...
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced 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 00h09.


 
 
 
 
Partenaires

Hébergement Web