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 :

Requête sur plage horaire par créneaux de 15 minutes [2012]


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 31
    Par défaut Requête sur plage horaire par créneaux de 15 minutes
    Bonjour,

    j'ai une tableau un nom d'évènement, une date de début, et une date de fin.

    Je souhaiterai obtenir le nombre d'évènements en cours dans une plage horaire par créneau de 15 min.

    Table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    id  ev  debut              fin
    1   a   11/12/2020 23:45   12/12/2020 01:30
    2   b   11/12/2020 23:37   12/12/2020 00:24
    3   c   12/12/2020 00:07   12/12/2020 00:55
    Exemple, pour une date de début et date de fin du 11/12/2020 23:45 au 12/12/2020 01:15 avec une somme des évènements en cours par plage de 15 minutes, le résultat devrai être:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    debut creneaux    nb evenements
    11/12/2020 23:45  2                (a et b)
    12/12/2020 00:00  3                (a, b et c)
    12/12/2020 00:15  3                (a, b et c)
    12/12/2020 00:30  2                (a et c)
    12/12/2020 00:45  2                (a et c)
    12/12/2020 01:00  1                (a)

    Merci par avance.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Mars 2016
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Mars 2016
    Messages : 58
    Par défaut
    Bonjour,

    Si tu crées une table contenant un calendrier avec des intervalles de 15mn et que tu fais une jointure sur ta table d’evenements, la requete sera beaucoup plus simple à ecrire !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 31
    Par défaut
    Bonjour sqllm,

    En effet, ca serait plus facile.
    Cependant j'ai juste des droits de lecture sur cette base.

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Vous pouvez toujours faire une CTE.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Mars 2016
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Mars 2016
    Messages : 58
    Par défaut
    J'ai rajouté votre jeu d'essai dans la CTE mais dans votre cas il faut prendre la table réelle :

    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
    24
    25
    26
    27
    28
     
    WITH PLAGEH AS
      (SELECT cast('2020-12-11 23:45' AS datetime2) AS PLAGEDEBUT,
              cast('2020-12-12 00:00' AS datetime2) AS PLAGEFIN
       UNION ALL SELECT PLAGEH.PLAGEFIN,
                        DATEADD(MINUTE, 15, PLAGEH.PLAGEFIN)
       FROM PLAGEH
       WHERE PLAGEH.PLAGEFIN <= '2020-12-12 01:00' ),
         TMP AS
      (SELECT 1 AS id,
              'a' AS ev,
              '2020-12-11 23:45' AS debut,
              '2020-12-12 01:30' AS fin
       UNION ALL SELECT 2,
                        'b',
                        '2020-12-11 23:37',
                        '2020-12-12 00:24'
       UNION ALL SELECT 3,
                        'c',
                        '2020-12-12 00:07',
                        '2020-12-12 00:55')
    SELECT PLAGEH.PLAGEDEBUT,
           count(*) AS NB_EV
    FROM PLAGEH
    JOIN TMP ON PLAGEH.PLAGEFIN >= TMP.debut
    AND PLAGEH.PLAGEDEBUT < TMP.fin
    GROUP BY PLAGEH.PLAGEDEBUT
    ORDER BY PLAGEH.PLAGEDEBUT OPTION (maxrecursion 0)
    ce qui donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    PLAGEDEBUT	NB_EV
    2020-12-11 23:45:00.0000000	2
    2020-12-12 00:00:00.0000000	3
    2020-12-12 00:15:00.0000000	3
    2020-12-12 00:30:00.0000000	2
    2020-12-12 00:45:00.0000000	2
    2020-12-12 01:00:00.0000000	1

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 31
    Par défaut
    Merci sqllm.
    Cela répond parfaitement.

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

Discussions similaires

  1. Remplacer une requête sur une class par une valeur constante ?
    Par Lillie CHARLOTTE dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 02/06/2015, 09h59
  2. [WD17] Planning Modifier la Plage Horaire Par Programmation!
    Par b_reda31 dans le forum WinDev
    Réponses: 1
    Dernier message: 30/12/2012, 11h37
  3. [MySQL] Requête sur plage de varchar
    Par Taelis dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 07/04/2011, 16h38
  4. Requête sur des horaires
    Par from31 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 23/12/2007, 13h10
  5. [requête] cumul d'horaires par semaine
    Par Toff !!!!! dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 02/11/2005, 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