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

Langage SQL Discussion :

Jointure approximative sur des plages de date


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2023
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2023
    Messages : 1
    Par défaut Jointure approximative sur des plages de date
    Bonjour,

    Je cherche une solution pour faire correspondre deux tables provenant de deux sources de données différentes, l'une est un planning théorique avec un id véhicule et un service affecté, l'autre table est le planning réel avec le km réalisé.

    table 1 planning théorique :
    id vehicule service timestamp de début timestamp de fin
    1 a 19/01/2023 09:30:00 19/01/2023 12:00:00
    1 b 19/01/2023 15:15:00 19/01/2023 19:00:00
    2 c 19/01/2023 07:30:00 19/01/2023 11:30:00


    Table 2 : planning réalisé

    id vehicule kms timestamp de début timestamp de fin
    1 50 19/01/2023 09:32:10 19/01/2023 11:51:34
    1 65 19/01/2023 15:24:10 19/01/2023 20:12:57
    2 32 19/01/2023 07:17:01 19/01/2023 11:46:48

    En réalité les tables sont beaucoup plus conséquente avec des milliers de lignes par jour dans chaque table.

    Ce que je voudrais obtenir c'est une table avec le jour, le véhicule, le service et le nombre de km.


    Table résultat souhaité :

    id vehicule date service kms
    1 19/01/2023 a 50
    1 19/01/2023 b 65
    2 19/01/2023 c 32

    J'avais pensé à prendre le milieu de la plage horaire dans les deux tables [timestamp de début] + (([timestamp de fin] - [timestamp de début]) /2) et faire une correspondance avec l'écart le plus faible, mais je sais pas s'il y a plus précis ?

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 633
    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 633
    Billets dans le blog
    10
    Par défaut
    Si une réservation couvre la plage de 10h00 à 15h00, mais que dans les faits, le véhicule a parcouru 100km de 8h00 à 12h00 pour le service "a" et 140km de 12h10 à 16h00 pour le service "b", quelle règle de gestion faut il adopter ?

    Le problème est qu'il faudrait que l'utilisation fasse référence à une réservation (au moyen d'une clef étrangère référencée)

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 176
    Par défaut
    Bonjour,

    Tu as juste à vérifier que pour un même id les plages se chevauchent entre ta table 1 et ta table 2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select t1.id,
           trunc(t1.date_debut) as date_debut,
           t1.service,
           t2.km	   
    from t1 
    join t2 on t1.id = t2.id 
     and t1.date_debut <= t2.date_fin 
     and t1.date_fin >= t2.date_debut;
    Bien sûr ça suppose que les plages ne se chevauchent pas pour un même id et 2 services différents.

Discussions similaires

  1. [XL-2003] Groupage de données sur des plages de dates variables
    Par nashifr dans le forum Excel
    Réponses: 1
    Dernier message: 25/08/2014, 10h12
  2. compter les occurrences sur des plages non contiguës
    Par docjo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/10/2009, 11h08
  3. [BO XIr2] Tests sur des différences entre dates
    Par Enthau dans le forum Deski
    Réponses: 4
    Dernier message: 27/07/2007, 10h49
  4. Requête sur une plage de date
    Par altecad dans le forum Requêtes
    Réponses: 1
    Dernier message: 23/05/2007, 15h11
  5. [DB2] Problèmes avec une Jointure externe sur des vues
    Par treivse dans le forum Langage SQL
    Réponses: 6
    Dernier message: 11/07/2006, 11h42

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