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

Une requête à la place d'un traitement itératif


Sujet :

Requêtes PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 485
    Par défaut Une requête à la place d'un traitement itératif
    bonjour,

    j'ai une table toute simple :
    id_mission
    id_personne
    date : date
    debut : time
    fin : time

    j'aimerai savoir si il y a un moyen en sql (car là je fais en itératif sur le serveur avec une boucle lourde) de trouver les id_mission qui sont en date croisée (missions superposées).

    par exemple, toto qui a une mission le 1/8/2012 de 8h à 11h et une autre le même jour de 8h à 9h (ce qui est impossible physiquement).

    mon contenue de table serait :
    mission personne date debut fin
    1 1 20130801 08 09
    2 1 20130801 8 11
    3 1 20130802 8 11

    il faudrait que la requête me ressorte l'id mission 1 (ou 2)

    Je suis certains que c'est une question que quelqu'un s'est déjà posé, ça me semble être un cas d'école pourtant je ne trouve pas de requête tordue qui puisse faire ça sans passer par une itération.

    Je crois (après avoir pensé et essayé moultes solutions en vain) que je dois mixer l'operateur ANY avec une condition à base de OVERLAPS mais pas moyen de sortir un truc qui fonctionne...

    quelqu'un a-t-il une idée ?


    ps : désolé de sortir un tel casse-tête chinois un jour de vacance, mais je travaille !

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    bonjour,

    quelle requête avez vous essayez ?

    Un simple test d'existante (EXISTS) devrait venir à bout de ceci.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    Il serait beaucoup plus intéressant de mettre une contrainte CHECK qui empêcherait une telle saisie plutôt que de faire des tests à postériori.

    A me lire :
    http://blog.developpez.com/sqlpro/p9...recouvrement_p
    http://blog.developpez.com/sqlpro/p9...es_externe_ave

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    L'idée qui doit manquer est de joindre la table à elle-même.
    Les conditions de jointure seraient:
    Même personne
    ET numéros de mission différents
    ET OVERLAPS positif entre les intervalles de temps de chaque côté de la jointure.

  5. #5
    Membre chevronné
    Avatar de tse_jc
    Homme Profil pro
    Data Solutions
    Inscrit en
    Août 2010
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Data Solutions
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 287
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Je suis de l'avis de SQLpro à passer par une contrainte check.

    Pourquoi? Tout simplement car il ne faut pas perdre de vue le rôle essentiel du SGBDR dans votre application : S'assurer de préserver non seulement l'acidité de vos données mais également leur qualité. Or effectuer un contrôle a postériori, signifie permettre l'enregistrement de données non conformes à vos contraintes métier.
    S'assurer de cela devrait être votre première priorité.

    Il n'est déjà pas forcément évident de gérer et de requêter des données valides à 100% au quotidien dans un contexte optimisé, pour en plus devoir s'imposer l'écriture de requêtes dédiées à l'extraction de données conformes préalablement à tous vos traitements habituels.

    Ensuite si vous voulez vous amuser à faire du bricolage ou à créer de la volumétrie "poubelle" dans votre BD pour l'exercice, libre à vous, mais bon vous savez ce que j'en pense maintenant.

    Cordialement,

    Jc.

  6. #6
    Membre éprouvé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 485
    Par défaut
    je comprends votre point de vue sur les contraintes seulement le cas que je cherche n'arrive que peut-être 5% des cas. donc pourquoi imputer à tout le monde un traitement qui sera long et aura un impact dans la réactivité de l'outil au moment où ça arrive....

Discussions similaires

  1. Réponses: 12
    Dernier message: 20/04/2015, 01h54
  2. Utilisation d'une requête à la place d'un curseur
    Par Mouckson dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 09/05/2012, 22h18
  3. Mise en place d'une requête
    Par lolotte38 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 26/09/2007, 19h08
  4. Réponses: 3
    Dernier message: 28/02/2007, 18h46
  5. Réponses: 3
    Dernier message: 06/01/2006, 09h03

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