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 :

Chevauchement entre périodes de cotisation


Sujet :

Requêtes et SQL.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ecarbill
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Juin 2004
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2004
    Messages : 229
    Par défaut Chevauchement entre périodes de cotisation
    Bonjour à tous,
    Dans le cadre de la gestion des cotisation d'une association, j'ai deux tables comme illustré ci-après.
    Nom : tauxFonction.png
Affichages : 113
Taille : 8,2 Ko

    En gros, Les taux de cotisation sont fixés selon la fonction des membres. Un taux de cotisation est défini pour une periode (Taux_Debut et Taux_Fin).
    Malheureusement, il se trouve que dans certains cas, il ya eu des chevauchements pour une même fonction. Par exemple:
    Pour une fonction donnée :
    - un taux de cotisation de 25 000 est fixé du 01/01/2006 au 14/08/2014
    - un taux de cotisation de 30 000 est fixé du 01/01/2014 au 31/07/2023

    Ainsi pour la période du 01/01/2014 au 14/08/2014, on a 2 taux de cotisation.
    Je souhaite écrire une requête qui ramène tous les enregistrements qui présente ce genre de problèmes, mais je rame depuis.

    Merci de m'aider à trouver une solution, et excellente journée à tous

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 430
    Par défaut
    Bonjour,
    Il suffit de retourner les lignes de la table TAUX_COTISATION pour lesquelles il en existe (au moins) une autre dont la date de début et/ou la date de fin est comprise entre les dates de la ligne en question:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select distinct t1.*
    from TAUX_COTISATION t1
    inner join TAUX_COTISATION t2
    on t2.TAUX_DEBUT between t1.TAUX_DEBUT and T1.TAUX_FIN 
    or t2.TAUX_FIN between t1.TAUX_DEBUT and T1.TAUX_FIN 
    and t1.txCOTIS_ID <> t2.txCOTIS_ID
    Une autre solution:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select distinct t1.*
    from TAUX_COTISATION t1
    inner join TAUX_COTISATION t2
    on t2.TAUX_FIN >= t1.TAUX_DEBUT 
    or t2.TAUX_DEBUT <= t1.TAUX_FIN
    and t1.txCOTIS_ID <> t2.txCOTIS_ID
    Tatayo.

  3. #3
    Membre éclairé Avatar de ecarbill
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Juin 2004
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2004
    Messages : 229
    Par défaut
    Bonjour et merci de ta réponse.
    J'ai essayé les deux codes, mais ca me ramène tous les enregistrements même quand il n'y a pas de chevauchement

    Merci

  4. #4
    Membre éclairé Avatar de ecarbill
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Juin 2004
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2004
    Messages : 229
    Par défaut
    En m'inspirant de tatayo, j'ai essayé ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT
        t1.FONCTION_ID, t1.FONCTION,
        t1.DATE_DEBUT,
        t1.DATE_FIN,
        t2.DATE_DEBUT,
        t2.DATE_FIN
    FROM
        rq_TauxCotisation t1
        INNER JOIN rq_TauxCotisation t2
                ON t1.FONCTION_ID = t2.FONCTION_ID AND t1.txCOTIS_ID<>t2.txCOTIS_ID  
        WHERE 
              NOT ((t2.DATE_FIN<t1.DATE_DEBUT) OR (t1.DATE_FIN<t2.DATE_DEBUT))
    ORDER BY t1.FONCTION_ID
    Ca semble ramener ce que je veux sauf que les enregistrements sont en double voir ci-dessous:

    Nom : reqdoublons.png
Affichages : 90
Taille : 27,9 Ko

    Merci

  5. #5
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 430
    Par défaut
    Oups, j'ai oublié les parenthèses:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select distinct t1.*
    from TAUX_COTISATION t1
    inner join TAUX_COTISATION t2
    on (t2.TAUX_DEBUT between t1.TAUX_DEBUT and T1.TAUX_FIN 
    or t2.TAUX_FIN between t1.TAUX_DEBUT and T1.TAUX_FIN)
    and t1.txCOTIS_ID <> t2.txCOTIS_ID
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    select distinct t1.*
    from TAUX_COTISATION t1
    inner join TAUX_COTISATION t2
    on (t2.TAUX_FIN >= t1.TAUX_DEBUT 
    or t2.TAUX_DEBUT <= t1.TAUX_FIN)
    and t1.txCOTIS_ID <> t2.txCOTIS_ID

    Et pour supprimer les doublons avec ta requêe:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT
        t1.FONCTION_ID, t1.FONCTION,
        t1.DATE_DEBUT,
        t1.DATE_FIN,
        t2.DATE_DEBUT,
        t2.DATE_FIN
    FROM
        rq_TauxCotisation t1
        INNER JOIN rq_TauxCotisation t2
                ON t1.FONCTION_ID = t2.FONCTION_ID AND t1.txCOTIS_ID < t2.txCOTIS_ID  
        WHERE 
              NOT ((t2.DATE_FIN<t1.DATE_DEBUT) OR (t1.DATE_FIN<t2.DATE_DEBUT))
    ORDER BY t1.FONCTION_ID

    Tatayo.

  6. #6
    Membre éclairé Avatar de ecarbill
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Juin 2004
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2004
    Messages : 229
    Par défaut
    Merci infiniment Tatayo du temps consacré à ma requête. Ca marche parfaitement.

    Excellente journée à toi

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

Discussions similaires

  1. [MySQL-5.1] Chevauchement entre deux dates
    Par guigui69 dans le forum Débuter
    Réponses: 3
    Dernier message: 18/08/2017, 10h21
  2. Réponses: 2
    Dernier message: 20/12/2013, 09h30
  3. Problème de chevauchement entre 2 divs
    Par ChriGoLioNaDor dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 11/10/2007, 09h44
  4. Problème chevauchement entre objets
    Par lesafir dans le forum 2D
    Réponses: 2
    Dernier message: 07/06/2007, 12h46
  5. [Strategie] Nombre de jours se chevauchant entre 2 fois 2 dates
    Par vallica dans le forum Général Java
    Réponses: 4
    Dernier message: 16/05/2006, 16h46

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