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 :

Comment vérifier si deux dates sont dans une mémé période ?


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2019
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2019
    Messages : 138
    Points : 39
    Points
    39
    Par défaut Comment vérifier si deux dates sont dans une mémé période ?
    Bonjour,

    J'ai une table missions qui a deux champs date_début_mission et date_fin_mission, je veux savoir comment extraire les missions qui se déroulent dans la même période en requête Mysql/php ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Quelle est la règle de gestion : même date de début et même date de fin pour les deux missions ou bien il suffit qu'il y ait chevauchement entre les deux périodes ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2019
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2019
    Messages : 138
    Points : 39
    Points
    39
    Par défaut
    Bonjour,

    La règle de gestion est qu'il ait uniquement chevauchement entre les deux périodes

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Je vois deux méthodes:
    1. Tu vérifies que la date de début et celle de fin de la deuxième sont entre les dates de début et de fin de la première,, avec 2 between
    2. Tu vérifies que la date de début de la deuxième est inférieure à la date de fin de la première, et que la date de fin de la deuxième est supérieure à la date de début de la première.

    Le choix de la "deuxième" période est arbitraire, vu qu'on cherche un chevauchement.
    Pour ma part j'utilise la deuxième méthode.

    Tatayo.

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Voici un exemple de requête qui analyse chaque cas : chevauchement, égalité ou période disjointe

    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
    16
    17
    18
    19
    20
    21
    22
    with tab1 (mission, dtdeb, dtfin) as
        (select 'Mission 01', '2019-02-01', '2019-02-04'  union all
         select 'Mission 02', '2019-02-01', '2019-02-02'  union all
         select 'Mission 03', '2019-02-03', '2019-02-05'  union all
         select 'Mission 04', '2019-02-01', '2019-02-04'  union all
         select 'Mission 05', '2019-02-08', '2019-02-09'  union all
         select 'Mission 06', '2019-02-12', '2019-02-15'  union all
         select 'Mission 07', '2019-02-14', '2019-02-16')
    select T1.mission   
         , T2.mission
         , case when T1.dtdeb = T2.dtdeb
                 and T1.dtfin = T2.dtfin 
                     then 'égalité'
                when T1.dtdeb < T2.dtfin
                 and T1.dtfin > T2.dtdeb 
                     then 'chevauch'
                else 'RàS'
           end as cas
    from tab1 T1
    left join tab1 T2
      on T2.mission > T1.mission
    order by T1.mission, T2.mission
    Résultat :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    mission     	mission	        cas
    Mission 01	Mission 02	chevauch
    Mission 01	Mission 03	chevauch
    Mission 01	Mission 04	égalité
    Mission 01	Mission 05	RàS
    Mission 01	Mission 06	RàS
    Mission 01	Mission 07	RàS
    Mission 02	Mission 03	RàS
    Mission 02	Mission 04	chevauch
    Mission 02	Mission 05	RàS
    Mission 02	Mission 06	RàS
    Mission 02	Mission 07	RàS
    Mission 03	Mission 04	chevauch
    Mission 03	Mission 05	RàS
    Mission 03	Mission 06	RàS
    Mission 03	Mission 07	RàS
    Mission 04	Mission 05	RàS
    Mission 04	Mission 06	RàS
    Mission 04	Mission 07	RàS
    Mission 05	Mission 06	RàS
    Mission 05	Mission 07	RàS
    Mission 06	Mission 07	chevauch
    Mission 07		RàS

  6. #6
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut à tous.

    Citation Envoyé par madinadiouf
    La règle de gestion est qu'il ait uniquement chevauchement entre les deux périodes
    Periode 1 : datdeb1 ; datfin1
    Periode 2 : datdeb2 ; datfin2

    Il suffit de tester ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where datdeb1 < datfin2 and datfin1 > datdeb2;
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2019
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2019
    Messages : 138
    Points : 39
    Points
    39
    Par défaut
    Bonjour à tous,

    Ma règle de gestion est la suivante :
    Pour chaque agent, et pour chaque mission qu'il participe ,je sélectionne sa date de début de mission et sa date de fin de mission, puis je le compare avec les missions en cours s'il y'a une autre mission dans laquelle il participe dans la même période.
    Supposons que la date de début de la mission de l'agent est datedebut_mission_agt et datefin_mission_agt
    et date_debut_mission la date de début d'une mission donnée et date_fin_mission sa date de fin.
    Comment comparer les dates ?

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Exactement comme on te l'a expliqué dans les réponses ci-dessus.
    Sauf qu'Artémus24 et moi-même avons fait la même erreur:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    where datdeb1 <= datfin2 and datfin1 => datdeb2;
    Après tout, les deux périodes peuvent avoir la même date de début et/ou la même date de fin.

    Tatayo.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2019
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2019
    Messages : 138
    Points : 39
    Points
    39
    Par défaut
    Bonjour,

    Merci j'ai compris. je faire les tests et vous revenir après

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Exactement comme on te l'a expliqué dans les réponses ci-dessus.
    Sauf qu'Artémus24 et moi-même avons fait la même erreur:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    where datdeb1 <= datfin2 and datfin1 => datdeb2;
    Après tout, les deux périodes peuvent avoir la même date de début et/ou la même date de fin.

    Tatayo.
    En fait, tout dépend de la façon dont sont définis les intervalles.
    Souvent, la date de début est incluse et la date de fin exclue, mais ce n'est pas une règle absolue

    À noter également qu'une période peut être définie par une date de début et une durée

    Et aussi, pour être complet, que certains SGBD comme PostGreSQL proposent des données de type INTERVAL (mais pas MySQL) avec des fonctions associées (OVERLAPS)

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2019
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2019
    Messages : 138
    Points : 39
    Points
    39
    Par défaut
    Bonjour,
    Moi je pense que ça va aller car je travaille sous Mysql.

  12. #12
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut à tous.

    Citation Envoyé par tatayo
    Sauf qu'Artémus24 et moi-même avons fait la même erreur:
    Quelle erreur ?

    Y-a-t-il chevauchement quand une mission commence et une autre se termine le même jour ?
    L'inclusion des bornes est souvent le cas dans cette gestion des périodes.
    Mais comme l'indique Escartefigue, la période s'exprime dans l'usage qui est appliquée.

    Citation Envoyé par madinadiouf
    Comment comparer les dates ?
    Il y a réciprocité dans l'usage des deux périodes que l'on désire comparer.
    Ou si vous préférez, vous pouvez remplacer periode 1 par période 2 et inversement, ce qui donne exactement le même test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    where datdeb1 <= datfin2
      and datfin1 => datdeb2;
    where datdeb2 <= datfin1
      and datfin2 => datdeb1;
    @ madinadiouf : le mieux est de travailler sur un exemple concret et de voir si le résultat que vous obtenez vous convient.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  13. #13
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Entre temps j'avais fait un tour sur le logiciel d'encaissement que nous utilisons. Comme ce dernier gère tout ce qui ressemble à une période (validité d'une carte de fidélité, opération commerciale), si une période se termine le 2, et une autre commence le 2, pour nous il y a chevauchement sur le 2. D'où mon dernier message.
    Si effectivement la date de fin n'est pas incluse (ce qui visiblement est "la règle"), la seule erreur est dans mon dernier message . OTAN pour moi.

    Tatayo.

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2019
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2019
    Messages : 138
    Points : 39
    Points
    39
    Par défaut
    Bonjour,

    Comme j'ai une table mission_agent qui contient les missions de chaque agent avec deux champs l'id de l’agent et l'id de la mission et d'autre part une table missions qui contient toutes les missions.
    avec arrivee_mission >= CURDATE(), j'ai les missions en cours qui ne sont pas encore terminées.
    Je demande si je fais cette requête
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql =$bdd_mission_msas->prepare('SELECT miss_agt.mission_id FROM mission_agents miss_agt,missions miss
    		 where (miss_agt.mission_id=miss.mission_id and miss.arrivee_mission >= CURDATE() and miss_agt.agent_id=?)') ;
     
    $sql->execute(array($agent_id_tous)) ;

    $agent_id_tous est l'id de l'agent concerné

    puis
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    num_of_rows = $sql->rowCount() ;
    si je teste if($num_of_rows>0) est-ce que ça suffit pas pour dire que l'agent participe à deux missions en cours ?

  15. #15
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    bonjour,

    Pour plus de clarté, il est préférable de distinguer les prédicats de filtrage positionnés dans le WHEREde ceux de jointure à positionner dans le JOIN.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT miss_agt.mission_id 
    FROM mission_agents miss_agt
    inner join missions miss
       on miss.mission_id = miss_agt.mission_id   
    where miss.arrivee_mission >= CURDATE() 
      and miss_agt.agent_id=? ;
    Ensuite, si vous voulez connaitre le nombre de missions en cours pour un agent mais que vous n'avez pas besoin des éléments de chaque mission, il est préférable de compter les missions avec COUNT().
    Çà évitera de transporter des valeurs de colonnes inutiles.
    Si vous avez besoin des éléments liés à chaque mission, vous devrez passer par un curseur.

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2019
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2019
    Messages : 138
    Points : 39
    Points
    39
    Par défaut
    Bonjour,

    J'ai effectivement besoin si l'agent participe à des missions en cours ,de connaitre les éléments de la mission(missions en cous) pour voir si chaque mission en cours n'est pas en chevauchement avec des d'autres missions auxquels l'agent participe.
    Ensuite je mets dans un tableau array() toutes les missions en chevauchement de l'agent.
    Voici mon code( à voir si elle est correcte)

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     include('functions.php');
                                  $bdd_mission_msas=connect();
     
    		  $tab_mission_en_chevauchement = array();
     
    		 $reponse_tous_agent = $bdd_mission_msas->query('SELECT agent_id FROM  agent;');
     
    		while ($donnees_tous_agent  = $reponse_tous_agent->fetch())
    {
     
    		 $agent_id_tous=$donnees_tous_agent['agent_id'];
    		 $sql_missions_en_cours =$bdd_mission_msas->prepare('SELECT miss_agt.mission_id,miss.depart_mission,miss.arrivee_mission 
    		 FROM mission_agents miss_agt inner join missions miss on miss.mission_id = miss_agt.mission_id 
    		 where (miss.arrivee_mission >= CURDATE() and miss_agt.agent_id=?);');
    		 $sql_missions_en_cours->execute(array($agent_id_tous)) ;
    		 $num_of_rows_missions_en_cours = $sql_missions_en_cours->rowCount() ;
     
    	if ($num_of_rows_missions_en_cours>0) // L'agent partcipe au moins à une mission en cours
    	{	
           while ($resultat_missions_en_cours = $sql_missions_en_cours->fetch());
     
    	          {
    	                 $mission_id_de_lagent=$resultat_missions_en_cours['mission_id'];
    	                 $date_depart_mission_en_cours=$resultat_missions_en_cours['depart_mission'];
    	                  $date_arrivee_mission_en_cours=$resultat_missions_en_cours['arrivee_mission'];
     
    	                  $sql_missions_en_chevauchement=$bdd_mission_msas->prepare('SELECT miss_agt_chevauch.mission_id FROM mission_agents miss_agt_chevauch inner join missions 
                                                                                                              miss_chevauch on miss_chevauch.mission_id = miss_agt_chevauch.mission_id 
    		                                                                                          where (miss_chevauch.depart_mission<=? and miss_chevauch.arrivee_mission=>? and 
                                                                                                                        miss_agt_chevauch.agent_id=?) and 
                                                                                                                         miss_chevauch.arrivee_mission >= CURDATE() ;');
     
    		             $sql_missions_en_chevauchement->execute(array($date_depart_mission_en_cours,$date_arrivee_mission_en_cours,$mission_id_de_lagent)) ;
     
    		             $num_of_rows_missions_en_chevauchement= $sql_missions_en_chevauchement->rowCount() ;
     
    		             if( $num_of_rows_missions_en_chevauchement>0)   // L'agent partcipe à des missions en chevauchement
    		                   {
     
    			                     while ($resultat_missions_en_chevauchement = $sql_missions_en_chevauchement->fetch());
    	                                     {
    				                             array_push($tab_mission_en_chevauchement,$resultat_missions_en_chevauchement ['mission_id']); // Je mets les missions en chevauchement dans un tableau array
                                               }
     
    		                      }
     
     
     
                           }
     
     
     
                       }
                 }

  17. #17
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    En ce cas, inutile de passer par un curseur contre-performant, utilisez simplement la requête suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select T1.mission  
         , T1.dtdeb
         , T1.dtfin
         , 'est en chevauchement avec'
         , T2.mission
         , T2.dtdeb
         , T2.dtfin
    from       tab1 T1
    inner join tab1 T2
      on  T2.mission > T1.mission
      and T1.dtdeb <= T2.dtfin 
      and T1.dtfin >= T2.dtdeb 
    order by T1.mission, T2.mission
    du coup ici on utilise une jointure INNER puisque seuls les chevauchement vous intéressent

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2019
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2019
    Messages : 138
    Points : 39
    Points
    39
    Par défaut
    Bonjour,

    En fait je comprends pas dans la requête les termes : est en chevauchement avec' , T2.mission,T1.mission

  19. #19
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Cela signifie que les deux missions ont au moins un jour en commun
    Exemple :
    Dans la même semaine la mission M1 commence le lundi et termine le jeudi et la mission M2 commence le mercredi et termine le vendredi.
    Dans cet exemple, le mercredi et le jeudi sont en chevauchement.

  20. #20
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    En reprenant le jeu d'essai proposé dans ma réponse n°5, à savoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    with tab1 (mission, dtdeb, dtfin) as
        (select 'Mission 01', '2019-02-01', '2019-02-04'  union all
         select 'Mission 02', '2019-02-01', '2019-02-02'  union all
         select 'Mission 03', '2019-02-03', '2019-02-05'  union all
         select 'Mission 04', '2019-02-01', '2019-02-04'  union all
         select 'Mission 05', '2019-02-08', '2019-02-09'  union all
         select 'Mission 06', '2019-02-12', '2019-02-15'  union all
         select 'Mission 07', '2019-02-14', '2019-02-16')
    La requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select T1.mission  
         , T1.dtdeb
         , T1.dtfin
         , 'est en chevauchement avec'
         , T2.mission
         , T2.dtdeb
         , T2.dtfin
    from       tab1 T1
    inner join tab1 T2
      on  T2.mission > T1.mission
      and T1.dtdeb <= T2.dtfin 
      and T1.dtfin >= T2.dtdeb 
    order by T1.mission, T2.mission ;
    a pour résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    mission         dtdeb           dtfin           est en chevauchement avec       mission         dtdeb           dtfin
    Mission 01	2019-02-01	2019-02-04	est en chevauchement avec	Mission 02	2019-02-01	2019-02-02
    Mission 01	2019-02-01	2019-02-04	est en chevauchement avec	Mission 03	2019-02-03	2019-02-05
    Mission 01	2019-02-01	2019-02-04	est en chevauchement avec	Mission 04	2019-02-01	2019-02-04
    Mission 02	2019-02-01	2019-02-02	est en chevauchement avec	Mission 04	2019-02-01	2019-02-04
    Mission 03	2019-02-03	2019-02-05	est en chevauchement avec	Mission 04	2019-02-01	2019-02-04
    Mission 06	2019-02-12	2019-02-15	est en chevauchement avec	Mission 07	2019-02-14	2019-02-16

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/07/2009, 10h51
  2. Réponses: 1
    Dernier message: 15/01/2009, 12h24
  3. Réponses: 4
    Dernier message: 26/08/2008, 17h11
  4. Comment savoir que deux dates sont égales ?
    Par bassim dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 19/12/2006, 19h36
  5. Tester si deux dates sont dans la même semaine ?
    Par boulzor dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 13/02/2006, 19h15

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