IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Créer une requête SQL à partir de 2 requêtes SQL - Comment les joindre ?


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2012
    Messages : 26
    Points : 20
    Points
    20
    Par défaut Créer une requête SQL à partir de 2 requêtes SQL - Comment les joindre ?
    Bonjour,
    J'ai cherché un bout de temps et je n'ai rien trouvé, alors peut-être que ce que je veux faire n'est simplement pas possible. Je vous explique.

    J'ai une table qui s'appelle T_Diffusion. Elle reprend l'ensemble des clips vidéos diffusés à l'antenne (je travaille dans une télévision locale).
    Dans la table j'ai plusieurs champs, mais pour faire court, gardons les champs MediaAsset et date de diffusion.

    Mon problème :
    Au cours, par exemple, du mois d'octobre, je dois lister les media asset joués avec leurs date de première diffusion (ah oui, nous travaillons en boucle de diffusion, un même programme est diffusé pendant plusieurs jours).
    Donc petit exemple :
    - le progamme x est joué le 25/09/2017 ; le 01/10/2017; 25/10/2017;...
    => moi je dois lister pour octobre : Programme x - 25/09/2017. => mon problème c'est que je dois faire 2 requêtes :

    - la première qui reprend les media asset joué pendant le mois d'analyse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ssReq1 = "SELECT DISTINCT T_Diffusion.MediaAsset FROM T_Diffusion "
    - la seconde qui recherche la première diffusion sur un interval de dates plus long (un an avant - la date de première diffusion peut être antérieur à la période d'analyse - sinon, cela aurait été facile..) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ssReq2 = "SELECT T_Diffusion.Mediaasset, MIN(T_Diffusion.DateDiff) AS prediff FROM T_Diffusion GROUP BY T_Diffusion.MediaAsset "
    NB : j'ai pas mis les dates pour simplifier

    Et ce qui serait cool, c'est d'avoir une requête qui associerait les deux ? Mais si dans le monde création d'access c'est facile, en sql je sais pas comment le faire. En gros comment écrire la jointure entre les deux requêtes ?

    Je vous remercie pour votre aide

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 191
    Points : 28 070
    Points
    28 070
    Par défaut
    C'est pas une jointure qu'il te faut mais une sous requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT T1.Mediaasset, MIN(T1.DateDiff) AS prediff 
    FROM T_Diffusion T1 
    WHERE T1.Mediaasset in (SELECT DISTINCT T_Diffusion.MediaAsset 
                            FROM T_Diffusion T2
                            WHERE T2.DateDiff > TaDateDebut AND T2.DateDiff < TaDateFin) 
    GROUP BY T1.MediaAsset
    Bon, à traduire en SQL Access, car celui-ci est assez particulier
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2012
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    Bonjour sevyc64,

    Merci pour ton aide. Effectivement, une sous requête était la bonne solution. Cependant, dans mon projet, l'exécution de la requête est beaucoup trop longue. J'ai donc cherché à optimaliser et j'avais encore cette question de " comment fait Access pour joindre deux requêtes ?" et j'ai trouvé après un dimanche de repos .

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim StrReq3 As String
     
        StrReq3 = "SELECT R1.MediaAsset, R2.Prog, R1.PremDiff " & _
               "FROM (SELECT T_Diffusion.Prog, T_Diffusion.MediaAsset " & _
                     "FROM T_Diffusion " & _
                     "WHERE T_Diffusion.Datediff BETWEEN " & DateUS(DtDuDiff) & " AND " & DateUS(DtAuDiff) & ") R2 " & _
               "INNER JOIN (SELECT T_Diffusion.MediaAsset, Min(T_Diffusion.DateDiff) AS PremDiff FROM T_Diffusion " & _
                            "GROUP BY T_Diffusion.MediaAsset " & _
                            "HAVING Min(T_Diffusion.DateDiff) BETWEEN " & DateUS(DtDu1er) & " AND " & DateUS(DtAuDiff) & ") R1 ON R2.MediaAsset = R1.MediaAsset " & _
               "GROUP BY R1.MediaAsset, R2.Prog, R1.PremDiff ORDER BY R1.MediaAsset "
    De cette manière, le code s'exécute plus rapidement.

    Si cela peut aider quelqu'un....

    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 03/06/2010, 11h39
  2. Réponses: 16
    Dernier message: 09/10/2006, 11h12
  3. Réponses: 2
    Dernier message: 24/08/2006, 12h02
  4. créer une partition disque à partir d'un dossier
    Par Ksual dans le forum Windows XP
    Réponses: 10
    Dernier message: 25/01/2006, 19h48
  5. Attaquer une base externe à partir d'un trigger SQL Server
    Par stephpr44 dans le forum Développement
    Réponses: 5
    Dernier message: 29/10/2005, 16h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo