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

Développement SQL Server Discussion :

Aide construction de requête


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 73
    Par défaut Aide construction de requête
    Bonjour,

    Je cherche à me débarrasser d'un curseur pour un traitement en le remplaçant par une requête ensembliste mais là je sèche un peu. Voici un jeu de test :

    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
    create table TEST
    (
    	inter int,
    	Debut DATETIME,
    	Fin DATETIME
    )
     
    INSERT INTO TEST 
    SELECT 1000, '01/02/2010 01:00:00', '20/02/2010 03:00:00'
    UNION ALL
    SELECT 1000, '18/02/2010 01:00:00', '26/02/2010 08:00:00'
    UNION ALL
    SELECT 1000, '01/03/2010 12:00:00', '10/03/2010 16:00:00'
    UNION ALL
    SELECT 1518, '01/01/2010 12:00:00', '25/01/2010 18:00:00'
    UNION ALL
    SELECT 1518, '02/02/2010 07:00:00', '05/02/2010 13:00:00'
    Je cherche à calculer le nombre de minutes passées par inter sans tenir compte des chevauchement des plages de temps par exemple pour l'inter 1000 ne tenir compte que des plages comprises du '01/02/2010 01:00:00' au '26/02/2010 08:00:00' et du '01/03/2010 12:00:00' au '10/03/2010 16:00:00'

    D'avance merci pour votre aide.
    Cordialement.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 43
    Par défaut
    Je ne suis pas spécialiste mais j'écrirais un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With RESULTAT (Inter, debut, fin) as
       (select Inter, Min(debut), Max(fin) from TEST 
            Group by Year(debut), MONTH(debut), inter)
     
    select inter, DATEDIFF(minute,debut,fin)as totalminutes from RESULTAT 
        Where Inter = 1000
    Par contre, attention : il faut absolument que fin soit du même mois que début. Je ne sais pas si c'est le cas. Sinon il faut créer une table temporelle et faire une jointure dessus

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 73
    Par défaut
    Bonjour,

    Merci de ta réponse malheureusement mais la date de fin n'est pas forcement du même mois que celle de début.

    Cdlt

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 009
    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 009
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    WITH RESULTAT (Inter, debut, fin)
    AS
       (SELECT Inter, Min(debut), Max(fin) FROM TEST 
        GROUP  BY inter)
    SELECT inter, DATEDIFF(minute,debut,fin)AS totalminutes 
    FROM RESULTAT;
    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/ * * * * *

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 73
    Par défaut
    Merci de votre réponse mais elle ne répond pas à ma problématique.

    En effet la solution que vous proposez calcul le nombre de minutes entre le min et le max de des plages temporelles.

    Dans mon calcul final je ne veux pas comptabiliser les minutes comprises entre 2 plages qui se chevauchent par exemple si j'ai 3 plages :
    - du '01/02/2010 01:00:00' au '20/02/2010 03:00:00'
    - du '18/02/2010 01:00:00' au '26/02/2010 08:00:00'
    - du '01/03/2010 12:00:00' au '10/03/2010 16:00:00'

    Je souhaiterais calculer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DATEDIFF(minute,'01/02/2010 01:00:00','26/02/2010 08:00:00') + DATEDIFF(minute,'01/03/2010 12:00:00', '10/03/2010 16:00:00')
    et non pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DATEDIFF(minute,'01/02/2010 01:00:00', '20/02/2010 03:00:00') +DATEDIFF(minute,'18/02/2010 01:00:00', '26/02/2010 08:00:00')
    +DATEDIFF(minute,'01/03/2010 12:00:00', '10/03/2010 16:00:00')
    ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DATEDIFF(minute,'01/02/2010 01:00:00', '10/03/2010 16:00:00')

    Cordialement

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Dans quel cadre dois-tu faire cela car j'ai peut-être une solution ?

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

Discussions similaires

  1. Besoin d'aide construction d'une requête
    Par frankiboy dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 10/03/2008, 20h25
  2. Demande d'aide pour une requête
    Par arkzor dans le forum Requêtes
    Réponses: 3
    Dernier message: 28/12/2004, 03h40
  3. Aide sur une requête (Group By...??)
    Par Cocolapin dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/12/2004, 11h26
  4. Besoin d'aide pour une Requête SQL ...
    Par Kokito dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/07/2004, 12h56
  5. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 16h38

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