DISTINCT à partir d'une jointure
Résolu
Bionik
Messages postés
4232
Date d'inscription
Statut
Modérateur
Dernière intervention
-
Ambucias Messages postés 47311 Date d'inscription Statut Modérateur Dernière intervention -
Ambucias Messages postés 47311 Date d'inscription Statut Modérateur Dernière intervention -
Salut,
Je travaille sous SQL Server pour mettre en place et je galère depuis hier avec une requête. J'ai deux tables et à partir de celle-ci, je fais une jointure et de cette jointure, je veux juste les résultats où les dates sont uniques (ça se fait normalement avec un DISTINCT). Je poste mes tables pour vous montrer et les requêtes:
Table jeux
Table PRevient
Requête de la jointure:
Le résultat de la jointure
Ce que je voudrais, c'est à partir de la table jointure avoir juste les lignes où les "dateVente" sont différentes et qu'elles soit les maximums.
En enlevant "u.dateEntree" du premier SELECT et du "GROUP BY", je l'ai mais je n'ai pas les autres champs, ce que je veux c'est avoir tous les champs comme sur la capture (jointure) mais seulement avec les dates (datePrix) différentes.
Merci de votre attention.
Je travaille sous SQL Server pour mettre en place et je galère depuis hier avec une requête. J'ai deux tables et à partir de celle-ci, je fais une jointure et de cette jointure, je veux juste les résultats où les dates sont uniques (ça se fait normalement avec un DISTINCT). Je poste mes tables pour vous montrer et les requêtes:
Table jeux
Table PRevient
Requête de la jointure:
SELECT u.code, u.console, u.dateVente, u.nom, u.possesseur, u.dateEntree, MAX(u.[dateVente]) AS dateprix FROM (SELECT tj.code, tj.dateVente, tj.console, tj.possesseur, tj.prixVente, tv.[dateEntree] , tv.prixRevient, tj.nom FROM jeux AS tj INNER JOIN PRevient AS tv ON ( tv.[dateEntree] <= tj.[dateVente] ) AND ( tj.[code] = tv.[codeGame] )) AS u GROUP BY u.code, u.dateVente, u.console, u.nom, u.possesseur, u.dateEntree;
Le résultat de la jointure
Ce que je voudrais, c'est à partir de la table jointure avoir juste les lignes où les "dateVente" sont différentes et qu'elles soit les maximums.
En enlevant "u.dateEntree" du premier SELECT et du "GROUP BY", je l'ai mais je n'ai pas les autres champs, ce que je veux c'est avoir tous les champs comme sur la capture (jointure) mais seulement avec les dates (datePrix) différentes.
Merci de votre attention.
A voir également:
- 2 colis distinct shein
- Supercopier 2 - Télécharger - Gestion de fichiers
- Vol chine-france temps colis shein - Forum Consommation & Internet
- Votre colis est arrivé sur notre agence régionale de distribution ✓ - Forum Consommation & Internet
- Hong kong france en avion colis shein - Forum Consommation & Internet
- Ramassage gha colis shein - Forum Consommation & Internet
4 réponses
Salut,
Sacrée requête :)
Pour être sûr de bien comprendre, dans ton exemple, tu ne veux QUE la ligne "2013-06-10" parce que cette date est unique, ou tu veux TOUTES les dates mais avec une seule ligne pour chaque ?
Si c'est ce 2ème cas, et que tu ne veux QUE les datePrix différents, il va falloir indiquer une fonction de groupement sur les autres colonnes ... car sinon, pour la date 2013-06-25, SQL ne saura pas lequel des 6 enregistrements tu veux ?
(MAX, MIN, ...) :
Dis moi :)
Sacrée requête :)
Pour être sûr de bien comprendre, dans ton exemple, tu ne veux QUE la ligne "2013-06-10" parce que cette date est unique, ou tu veux TOUTES les dates mais avec une seule ligne pour chaque ?
Si c'est ce 2ème cas, et que tu ne veux QUE les datePrix différents, il va falloir indiquer une fonction de groupement sur les autres colonnes ... car sinon, pour la date 2013-06-25, SQL ne saura pas lequel des 6 enregistrements tu veux ?
(MAX, MIN, ...) :
SELECT MAX(code), MAX(console), MAX(dateVente), ... , datePrix FROM (<ta requête ici>) GROUP BY datePrix
Dis moi :)
Bonjour Bionik fiston et ami,
T'as de la veine ou il y a quelqu'un la haut qui t'aime ! Tu reçois de l'aide de Damien, le top des tops, l'éminence en la matière !
Bonne journée
T'as de la veine ou il y a quelqu'un la haut qui t'aime ! Tu reçois de l'aide de Damien, le top des tops, l'éminence en la matière !
Bonne journée
Moqueur va ... ^^ non mais sans déc c'est pas souvent qu'il y a des requêtes aussi rigolotes et bien étayées ... si j'avais le temps je me monterais la même structure pour tester :D
Merci ô Sir Dam,
Un bon café, et quelques minutes (ok, quelques heures) de réflexion ont suffit pour résoudre le problème.
En fait, j'avais juste fait une modélisation "on-the-fly" de ma base, j'avais pas bien pris le temps de bien faire les choses. Sur ce, je suis reparti de zéro et j'ai refait la modélisation qui me donne trois tables, une pour jeux, une autre pour ventes et une dernière pour pRevient.
Voici ces tables:
table jeux
table ventes
table pRevient
Et le résultat que je voulais
Table Finale
Pour la requête qui donne cette dernière, c'est un peu ça:
Alors, c'est toujours aussi rigolote? :)
Mais ca, c'est juste un test et ça va beaucoup m'aider sur le système réél (mis en place d'une application "machin-truc" utilisant une base de données SQL Server, Accès, Excel, Sharepoint, PowerPivot et sans oublier PHP pour la partie programmation, déjà que j'avais galéré pour trouver le bon driver SQLServer-PHP, c'est bien parti ;).
Merci anyway de ton aide Dam ;)
PS: Ave Ambucias, je te charge de la partie Accès et Excel, ze ve voir ce ke ta dan le ventre :)
Un bon café, et quelques minutes (ok, quelques heures) de réflexion ont suffit pour résoudre le problème.
En fait, j'avais juste fait une modélisation "on-the-fly" de ma base, j'avais pas bien pris le temps de bien faire les choses. Sur ce, je suis reparti de zéro et j'ai refait la modélisation qui me donne trois tables, une pour jeux, une autre pour ventes et une dernière pour pRevient.
Voici ces tables:
table jeux
table ventes
table pRevient
Et le résultat que je voulais
Table Finale
Pour la requête qui donne cette dernière, c'est un peu ça:
SELECT jeux.nom, jeux.possesseur, r.dateVente, r.prixVente, r.prixRevient, r.Marges FROM jeux INNER JOIN (SELECT ventes.idJeux, ventes.dateVente, ventes.prixVente, [pRevient].prixRevient, [ventes].[PrixVente]-[pRevient].[PrixRevient] AS Marges FROM (ventes INNER JOIN (SELECT u.idJeux, u.dateVente, MAX(u.dateReception) AS dateMax FROM (SELECT ventes.idJeux, ventes.dateVente, pRevient.dateReception FROM ventes INNER JOIN pRevient ON ventes.idJeux = pRevient.idJeux WHERE pRevient.dateReception <= ventes.dateVente) AS u GROUP BY u.idJeux, u.dateVente) AS v ON ventes.dateVente = v.dateVente) INNER JOIN [pRevient] ON (v.idJeux = [pRevient]. idJeux) AND (v.dateMax = [pRevient].dateReception) GROUP BY ventes.idJeux, ventes.dateVente, ventes.prixVente, [pRevient].prixRevient, [ventes].[PrixVente]-[pRevient].[PrixRevient] ) AS r ON r.idJeux = jeux.idJeux ;
Alors, c'est toujours aussi rigolote? :)
Mais ca, c'est juste un test et ça va beaucoup m'aider sur le système réél (mis en place d'une application "machin-truc" utilisant une base de données SQL Server, Accès, Excel, Sharepoint, PowerPivot et sans oublier PHP pour la partie programmation, déjà que j'avais galéré pour trouver le bon driver SQLServer-PHP, c'est bien parti ;).
Merci anyway de ton aide Dam ;)
PS: Ave Ambucias, je te charge de la partie Accès et Excel, ze ve voir ce ke ta dan le ventre :)
@Bionik, Merci pour ton inébranlable confiance dans mes talents, mais, justement j'ai le ventre vide Pour la partie Excel, mon Ange, voire Fanny, pourraient s'en charger mais elles ne sont pas membres. Dommage ! (Tu as pensé à rizvisa1 ou à TrowanD ?)
@Damien, on sait bien que la modestie est le genre de fierté qui blesse le moins,
@Damien, on sait bien que la modestie est le genre de fierté qui blesse le moins,