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 MySQL Discussion :

[MySQL 5.7] Reconstruction "Photos" Passé + Future via Calendrier


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Octobre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2018
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [MySQL 5.7] Reconstruction "Photos" Passé + Future via Calendrier
    Bonjour à tous !

    Je fais face à un petit soucis depuis quelques jours pour lequel je n'arrive pas à trouver de solution satisfaisante.
    Concrètement, je dispose de 3 tables:
    - future : on "capture" les ventes déjà effectuées pour une prestation à une date future. Nous avons donc la photoDate (date de capture), la dateTY (date de réalisation de la prestation) et qty (la quantité).
    - past : ce sont les prestations réellement réalisées sur toutes les dates passées. Nous avons donc dateTY et qty.
    - calendar : une liste de dates uniques (dateTY)

    Ce que j'essaie de faire est de reconstituer une "photo" complète (passé + future) pour l'ensemble des dates photos existantes. J'arrive à le faire via un UNION pour une date photo bien précise, mais impossible de le faire pour l'ensemble des photos disponibles.

    Avec l'exemple ci-dessous, je m'intéresse aux dates entre le 09 Septembre (@dteStart) et le 15 Septembre (@dteEnd) et à toutes les photos avant le 15 Septembre (@photoDate). Je m'attends donc à avoir une liste de dates de photos, avec pour chacune la totalité des dates entre @dteStart et @dteEnd : si la photoDate se situe avant la période étudiée, seule la table future est utilisée, si la photoDate est après cette période, uniquement la table past est utilisée, mais si elle est au milieu de cette période, les deux tables sont utilisées pour "reconstruire" la situation au moment donné.

    Or ma requête ne me renvoi que les dates de la table future. Pourquoi ? Je pensais qu'en utilisant justement une table de calendrier et des LEFT JOIN me permettrait de toujours ressortir l'ensemble des dates.

    Voici ma requête ainsi qu'un fiddle avec des données. Avez-vous une idée ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SET @photoDate='2019-09-15';
    SET @dteStart='2019-09-09';
    SET @dteEnd='2019-09-15';
    SELECT photoDate, c.dateTY, COALESCE(SUM(p.qty),SUM(f.qty)) Qty
    FROM calendar c
    LEFT JOIN (
          SELECT photoDate,dateTY,SUM(qty) qty 
          FROM future 
          WHERE dateTY BETWEEN @dteStart AND @dteEnd 
          GROUP BY photoDate,dateTY
         ) f ON photoDate <@photoDate AND c.dateTY=f.dateTY
    LEFT JOIN past p ON p.dateTY>@dteStart AND p.dateTY<photoDate AND c.dateTY = p.dateTY
    WHERE c.dateTY BETWEEN @dteStart AND @dteEnd
    GROUP BY photoDate,c.dateTY
    ORDER BY photoDate ASC, c.dateTY ASC
    Merci !!

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,


    Vous parlez d'un UNION, mais je n'en vois pas dans votre requête !?

    Vous pourriez faire un UNION des deux tables dans une sous requete (d'ailleurs, pourquoi avoir créé deux tables distinctes ?)

    dans votre requete actuelle, la condition de jointure AND p.dateTY<photoDate ne sera pas vraie si la jointure externe précédente ne renvoie pas de ligne, car alors photoDate sera à NULL.

    Enfin, d'un point de vue fonctionnel, je ne vois pas a quoi doit correspondre PhotoDate pour les données issues de la table Past

    du coup... je ne comprend pas trop quel résultat vous cherchez à obtenir...

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/01/2010, 22h39
  2. Afficher une photo .Jpg sur Excel via macro Excel
    Par moilou2 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 23/04/2008, 11h51
  3. IOResult passe à travers via fichier ouvert en reseau
    Par moulery dans le forum Langage
    Réponses: 1
    Dernier message: 27/08/2007, 17h30
  4. [Système] Changer un mot de passe unix via PHP
    Par gordon00 dans le forum Langage
    Réponses: 3
    Dernier message: 03/06/2007, 17h11
  5. MySQL encrypt et changement de mot de passe
    Par Michaël dans le forum Requêtes
    Réponses: 6
    Dernier message: 27/11/2005, 17h37

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