Je patoge dans la semoule depuis quelques jours sur une requete SQL, c'est avec déséspoire que je fait un post ici en éspérant pouvoir avoir une solution.
Mon code actuel ci-dessous :
"SELECT * FROM abonnement
INNER JOIN abonnement_client ON abonnement.email = abonnement_client.email
INNER JOIN abonnement_historique ON abonnement_historique.id_sub = abonnement.id_sub
GROUP BY abonnement_historique.id_sub DESC
ORDER BY abonnement.date_sub DESC";
Je cherche à obtenir toutes les lignes de chaque dernier "abonnement_historique.id" de chaque "abonnement"(abonnement.id_sub) en joignant les tables "abonnement" et "abonnement_client" pour obtenir les informations de celles-ci.
J'obtiens bien l'historique de chaque abonnement grâce au "GROUP BY" mais pas du dernier id de abonnement_historique.id.
J'attend votre aide si vous avez bien tout compris
Hello, réponse un peu tard, mais si ton SGBD le permet, regarde du côté des ROW_NUMBER.
L'idée du truc, c'est que tu regroupes toutes les lignes avec le même id_sub, et que pour chacun de ces lots, tu définisses un tri, genre un tri par date.
Un fois cela fait, tu vas rajouter une colonne index pour indiquer avec un "1" la première ligne de chaque groupe, puis un 2 ma 2e ligne de chaque groupe, etc.
Une fois que c'est fait, tu englobes tout ça et tu ne prends que les index à 1, c'et à dire les 1eres lignes de chaque groupe.
De cette manière, tu ne ressors que la 1ere ligne de chaque id_sub, trié par une date. Pour sortir la derniere ligne, tu inverses ton tri par date en ASC et basta.
Vu que j'ai un peu de temps, voila, mais c'est non testé, donc potentiellement en erreur. Si c'est le cas, je compte sur toi pour fouiller x)
SELECT * FROM
(SELECT
a.*,
ac.*,
ac.*,
ROW_NUMBER() OVER(PARTITION BY ah.id_sub ORDER BY a.date_sub DESC) as rang
FROM abonnement a
INNER JOIN abonnement_client ac ON a.email = ac.email
INNER JOIN abonnement_historique ah ON ah.id_sub = a.id_sub) as tmp
WHERE rang = 1
- Edité par Tiffado 19 juillet 2023 à 17:10:48
Requête Mysql avec jointure
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.