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

Développement SQL Server Discussion :

Requêtes imbriquées, jointure ?


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2016
    Messages : 16
    Points : 9
    Points
    9
    Par défaut Requêtes imbriquées, jointure ?
    Bonjour à tous, je vous expose mon problème
    Les champs de ma Table : ID, Item (string), SiteArrivée (String), SiteDépart (string), date (jj/mm/yyyy hh:mm)

    Les items entrent de façon aléatoire sur un site d'arrivée et en repartent quelque heures après (en général). Si l'item n'est pas conforme, il reste sur le site d'arrivée et ne partira que après sa remise en conformité.
    Du fait que pour un enregistrement donnée il y a toujours un site de départ et un site d'arrivée, il n'y a qu'un seul champ "date" qui donne la date de ce transfert

    La requête que je souhaite faire est :
    Récupérer tous les derniers arrivées sur un site donné, ca je sais faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT iteme ,  MAX(date) AS maxdate  FROM (SELECT * FROM table WHERE siteArrivee = 'site1') AS t1 
    WHERE item <> '' AND   GROUP BY item HAVING MAX(date) < {ts'2016-05-02 22:28'}
    Mais là ou je bloque, c'est que je souhaite au moment de l'interrogation de la BDD, savoir quels sont les items qui sont toujours sur mon site passé en paramètre a la date passée aussi en paramètre (2016-05-02 22:28 dans l'exemple)

    Merci d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Serge__F Voir le message
    ca je sais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT iteme ,  MAX(date) AS maxdate  FROM (SELECT * FROM table WHERE siteArrivee = 'site1') AS t1 WHERE item <> '' AND   GROUP BY item HAVING MAX(date) < {ts'2016-05-02 22:28'}
    Sauf que cette syntaxe est invalide

    Citation Envoyé par Serge__F Voir le message
    MAis là ou je bloque, c'est que je souhaite au moment de l'interrogation de la BDD, savoir quels sont les items qui sont toujours sur mon site passé en paramètre a la date passée aussi en paramètre (2016-05-02 22:28 dans l'exemple)
    Vu qu'un item est encore présent sur le site tant qu'il n'a pas de date de sortie, faites comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select item
         , SiteArrivée
    from matable main
    where main.site = @site
      and not exists
         (select 1
          from matable subq
          where subq.item  = main.item
            and subq.site  = main.site
            and subq.date <= @date)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2016
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Bonjour,
    Merci Escartefigue (Attention à la vapeur !! )
    J'essaie cela DQPS dans la journée et vous tiens au courant.

    Merci encore

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2016
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Re Bonjour,

    Désolé cela ne fonctionne pas, je vais essayer de préciser un peu plus :
    Chaque ligne de la BDD reprend l'Item, la date (dd/mm/yyyy hh:mm), le siteDépart, le siteArrivé
    Chaque item peut rentrer plusieurs fois par semaine sur un même siteArrivé

    Si l'item est 'OK', une ligne représentant un transfert est inscrite dans la BDD,
    Il est possible qu'une ligne soit inscrite avec une date > à 'aujourd'hui', c'est une prévision (date sera égale à Aujourd'hui + 4 ou 5 jours)

    L'objectif de ma requête est donc de déterminer les items rentrés sur un site X (passé en paramètre), au moment de la demande de la requête, et pour lequel, il n'y a pas de ligne de transfert entre Ce site X et un autre, à une date Supérieur à la date de rentrée sur site X ET <= à la date actuelle.

    En espérant beaucoup de ce forum...
    Merci

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Bonsoir,

    Si possible communiquez un exemple de jeu de données en entrée et le résultat attendu en sortie, avec ça la solution devrait se dégager assez naturellement

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2016
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Bonsoir,

    Me permettez vous de vous répondre par mail SVP ... ? (Donnée relativement sensibles...)

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2016
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Ci dessous un exemple :

    Les différentes rentrées de l'item 09xx sur le site1
    Nom : 09xx arr site1.png
Affichages : 99
Taille : 5,6 Ko

    Les départs de l'item 09xx du site 1
    Nom : 09xx dep site1.png
Affichages : 101
Taille : 5,0 Ko

    On peut voir que la dernière rentrée date du 29/04/16 21h45 et sa sortie le 1/5 à 15h40

    Par contre, concernant l'item 135xx, on peut voir que la dernière arrivée sur le site 1 date du 1/5/16 22h, et qu'il n'y a pas de sortie de l'item 135xx du site1 après cette date ==> DONC l'item 135xx est sur le site 1 depuis le 1/5/16 22h
    Nom : 135xx arr site1.png
Affichages : 187
Taille : 3,9 Ko

    Nom : 135xx dep site1.png
Affichages : 104
Taille : 3,8 Ko

    C'est ces items qui sont restés sur un site donné que je souhaite visualiser.


    Merci encore pour votre aide

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2016
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    hum...
    Grâce à votre première requête, je pense avoir trouvé la solution. Cela semble fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select item, date, sitearrivee from matable as main where main.sitearrivee = 'site1' AND date < {ts '2016-05-04 22:30'} AND item<> '' 
      and not exists
         (select 1 /*(OU * pas de différence à priori)*/
          from matable  as subq
          where main.item  = subq.item
            and subq.sitedepart  = 'site1'
            and subq.date > main.date
            ) ORDER BY item
    En tous cas, MERCI beaucoup de m'avoir mis sur la bonne voie, car j'étais très mal parti...

Discussions similaires

  1. Jointure requête imbriquée
    Par assiya dans le forum SQL
    Réponses: 3
    Dernier message: 13/11/2009, 12h21
  2. jointure entre requête imbriquée et requête parente
    Par speedev dans le forum Requêtes
    Réponses: 5
    Dernier message: 04/03/2009, 11h24
  3. Jointures ou requêtes imbriquées ?
    Par Evocatii dans le forum Débuter
    Réponses: 2
    Dernier message: 22/02/2008, 12h56
  4. Transformer requête imbriquée en jointure
    Par Nadoo dans le forum Requêtes
    Réponses: 4
    Dernier message: 07/05/2006, 00h41
  5. [MySQL] Erreur SQL 1064 : Requête imbriquée avec jointure !
    Par patchankito dans le forum Langage SQL
    Réponses: 5
    Dernier message: 31/01/2006, 10h37

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