|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Ingénieur Télécom Inscription : septembre 2011 Messages : 5 ![]() |
Bonjour,
Débutant en SQL je tourne en rond depuis deux jours pour trouver la solution au problème suivant: Je gère une bdd de suivi de retours SAV. La table principale est donc remplie avec les retours des produits en SAV. Les champs de la table principale sont, entres autres: NumSerie et DateArrivée. Extrait: "A12083401578615307";"2011-05-16" "A12083401790515300";"2011-05-17" "A12083402650215309";"2011-05-16" "A12083401790515300";"2011-05-21" "A12083403027815306";"2011-05-16" Là où je coince c'est pour concevoir la requête qui me permettra de connaitre les produits qui sont revenus plusieurs fois en SAV. Ce sont donc les n° de série qui ne sont pas unique. ex: "A12083401790515300";"2011-05-17" "A12083401790515300";"2011-05-21" Par avance, merci pour votre aide |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Il faut filtrer avec having count(*) > 1
Tu devras faire une sous-requête pour récupérer ensuite le max (ou min) de la date pour chaque numéro de série retourné par la sous-requête. |
|
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() Ingénieur Télécom Inscription : septembre 2011 Messages : 5 ![]() |
Merci pour ta réponse.
J'ai appliqué ton conseil. Hélas, je n'obtiens pas exactement ce que je cherche. Ci-dessous quelques données. En bleu, les données que je souhaite retrouver. Numero Serie Date Arrivee IE1000390502230168 2010-04-05 IE1000390732230167 2010-04-14 IE1000390807830162 2010-04-05 IE1000390502230168 2011-04-05 IE1000390732230167 2011-04-14 IE1000390807830162 2011-04-05 IE1000390973130165 2011-05-26 IE1000390994630163 2011-05-24 IE1000391056130164 2011-05-24 IE1000391061130166 2011-06-01 IE1000410073030162 2011-05-31 La requête créée Code :
Numero Serie Date Arrivee IE1000390502230168 2010-04-05 IE1000390732230167 2010-04-14 IE1000390807830162 2010-04-05 alors que je souhaite avoir ceci Numero Serie Date Arrivee IE1000390502230168 2010-04-05 IE1000390732230167 2010-04-14 IE1000390807830162 2010-04-05 IE1000390502230168 2011-04-05 IE1000390732230167 2011-04-14 IE1000390807830162 2011-04-05 |
||
|
|
00
|
|
|
#4 | ||
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Je suis très étonné que ta requête fonctionne : normalement, tous les champs qui ne font pas partie d'une fonction de regroupement doivent être dans le "group by" (donc numéro de série et date).
Sinon, comme je te disais, il faut passer par une sous-requête. Code :
|
||
|
|
00
|
|
|
#5 | |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Citation:
A lire : http://blog.developpez.com/sqlpro/p9...udre-aux-yeux/ 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 * * * * * |
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Ingénieur Télécom Inscription : septembre 2011 Messages : 5 ![]() |
Super!!!
C'est fou ce que j'apprends aujourd'hui!! Ça fonctionne parfaitement ainsi. Il ne reste qu'à améliorer les temps de réponse puisque ma base main contient pour l'instant 200 000 entrées et qu'elle va grossir très rapidement. Actuellement sur un serveur de test avec mySQL, cette requête dure au moins 1/2h. Aurais-tu quelques pistes? |
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Ingénieur Télécom Inscription : septembre 2011 Messages : 5 ![]() |
je me réponds à moi même.
Je viens de lire le lien indiquer par sqlPro. Je comprends que mySQL n'est pas forcément l'outil le plus adapté à mon besoin ne serait-ce qu'en terme de performance. |
|
|
00
|
|
|
#8 | ||
|
Membre Expert
![]() Responsable de service informatique Inscription : janvier 2009 Messages : 1 092 ![]() |
Bonjour,
Tu peux essayer de remplacer le IN par une jointure: Code SQL :
Tatayo. |
||
|
|
10
|
|
|
#9 | |||
|
Invité de passage
![]() Ingénieur Télécom Inscription : septembre 2011 Messages : 5 ![]() |
Citation:
Cette requête a duré moins de 5s. Je vais maintenant la décortiquer pour essayer de comprendre. Ça risque de me prendre du temps. |
|||
|
|
00
|
|
|
#10 | |
![]() ![]() ![]() Cédric DuprezInscription : avril 2002 Messages : 3 823 ![]() |
Citation:
__________________
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
|
|
|
|
00
|
|
|
#11 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Oui, jai lu cela avec attention. Il se trouve que je dispose des CD de la norme IOS SQL dans toutes ses versions depuis la 1999.
Or le papier est incomplet et la position de MySQL parfaitement irrespectueuse de la norme. Effectivement la norme SQL permet depuis la v 1999 un GROUP BY sur clef (PRIMAIRE ou UNIQUE) permettant d’omettre d'autres colonnes. mais cela fait partie des fonctionnalités avancées de la norme, c'est à dire que cette particularité ne doit être implémentée que dans le cadre ou le respect de la norme se fait en FULL LEVEL ! (Il y a 3 niveaux de conformité : ENTRY, INTERMEDIATE, FULL) Or en matière de respect de la norme SQL, MySQL en n'est même pas au niveau SQL 2 de 1992 (pas de schéma SQL par exemple) et donc bien entendu pas au niveau 1999 ni au niveau FULL. En comparaison, MS SQL Server se clame au niveau 2003, ENTRY... Bref encore une fois MySQL fait du n'importe quoi et s'arrange à la façon qui lui plait en non en conformité avec la norme. Aucun des grands éditeurs de SGBDR (Oracle, SQL Server, DB2 UDB, PostGreSQL...) n'a implémenté cette fonctionnalité qui n'a de sens que si tout le reste est déjà opérationnel ! 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 * * * * * |
|
10
|
|
|
#12 | ||
|
Membre éclairé
![]() |
Essayes aussi:
Code :
|
||
|
|
10
|
Copyright © 2000-2012 - www.developpez.com