Partage
  • Partager sur Facebook
  • Partager sur Twitter

Requête Mysql avec jointure

    30 juin 2023 à 20:10:32

    Bonjour à tous,
    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 :)
    • Partager sur Facebook
    • Partager sur Twitter
      19 juillet 2023 à 17:05:56

      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.

      ROW_NUMBER (Transact-SQL) - SQL Server | Microsoft Learn

      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

      • Partager sur Facebook
      • Partager sur Twitter

      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.
      • Editeur
      • Markdown