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

MS SQL Server Discussion :

Compteur pour une simultanéité


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 6
    Par défaut Compteur pour une simultanéité
    Bonjour à tous,

    Je cherche à calculer une simultanéité entre des interventions liés à des véhicules.

    Les champs de ma table sont les suivants : Vehicule/Datedebut/DateFin
    Je cherche à alimenter un compteur à la minute qui me permettrai de calculer chacune des simultanéités.

    ex : le véhicule V1 est en interventions en même temps que le V2 pendant 10 min :

    2 véhicules = 10 min

    ensuite un V3 est également en interventions simultanément avec les deux premiers pendant 4 min :

    2 véhicules = 10 min
    3 véhicules = 4 min

    ensuite le V2 termine son intervention, il ne reste que V1 et V3 pendant 6 min puis V3 seul pendant 20 min.

    2 véhicules = 16 min
    3 véhicules = 4 min

    J’espère que je suis assez clair !
    Je n'arrive pas à trouver la solution, sachant que j'ai une 100aine d'interventions par jours avec une 10aine de véhicules.... et que je dois remonter sur 3 ans en arrière...

    Merci d'avance pour votre aide.
    Benjamin

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Le besoin est clair, mais un jeu de données serait appréciable !

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 6
    Par défaut
    Voici un jeu de données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    declare @TableTest table (IdVehicule char(6), DateDebut datetime, DateFin datetime);
     
    INSERT INTO @TableTest (IdVehicule, DateDebut, DateFin) VALUES 
    ('VSAB1G', '2012-11-01 00:56:00.000', '2012-11-01 01:09:00.000'),
    ('VSAB1T', '2012-11-01 00:56:00.000', '2012-11-01 01:25:00.000'),
    ('VSAB1J', '2012-11-01 01:28:00.000', '2012-11-01 01:55:00.000'),
    ('VSAB1V', '2012-11-01 03:17:00.000', '2012-11-01 04:53:00.000'),
    ('VSAB1J', '2012-11-01 03:24:00.000', '2012-11-01 03:46:00.000'),
    ('VSAB1J', '2012-11-01 04:31:00.000', '2012-11-01 06:12:00.000'),
    ('VSAB1G', '2012-11-01 04:44:00.000', '2012-11-01 05:22:00.000'),
    ('VSAB2G', '2012-11-01 04:46:00.000', '2012-11-01 05:38:00.000'),
    ('VSAB2V', '2012-11-01 04:50:00.000', '2012-11-01 05:27:00.000');
     
    select * from @TableTest;
    J'espère que le format vous convient.
    Merci pour votre réactivité !

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Pas besoin de 300 lignes pour illustrer quand même, un jeu de données ce sont les cinq ou dix lignes nécessaires à reproduire le problème.

    Il faut aussi les rendre directement utilisable avec un script d'insertion dans une table, une variable table ou un with, le but est de vous aider pas de casser le forum.

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 6
    Par défaut
    Désolé, je viens de modifier mon précédent messages.

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Merci c'est plus simple.

    J'ai fait une méthode un peu brute, j'ai mis un compteur minute par minute et je regarde le nombre de véhicules à ce moment-là.
    Ensuite je cumule le nombre de minutes par le nombre de véhicules.
    Le résultat m'a l'air correct :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    with calc (nb) as
    (
    select 0
     union all
    select nb + 1
      from calc
     where nb < 24*60-1
    )
      ,  jour (dt) as
    (
    select CAST(floor(cast(DateDebut as float)) as datetime)
      from @TableTest
     union
    select CAST(floor(cast(DateFin   as float)) as datetime)
      from @TableTest
    )
      ,  sr (minute_calc, nb_vehicules) as
    (
        select DATEADD(minute, cl.nb, jr.dt)
             , COUNT(tt.IdVehicule)
          from calc       as cl
    cross join jour       as jr
     left join @TableTest as tt
            on DATEADD(minute, cl.nb, jr.dt) between tt.DateDebut and tt.DateFin
      group by DATEADD(minute, cl.nb, jr.dt)
    )
      select nb_vehicules, COUNT(minute_calc) as nb_minutes
        from sr
    group by nb_vehicules
    order by nb_vehicules
      option (maxrecursion 1440);
     
     
    nb_vehicules nb_minutes
    ------------ -----------
    0            1206
    1            129
    2            61
    3            7
    4            33
    5            4

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

Discussions similaires

  1. compteur pour une application
    Par hanadakia dans le forum Installation, Déploiement et Sécurité
    Réponses: 0
    Dernier message: 02/03/2012, 16h29
  2. Bouton qui s'affiche pour une certaine valeur d'un compteur
    Par elmander dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/05/2010, 11h52
  3. Réponses: 5
    Dernier message: 27/11/2009, 09h21
  4. Equivalent à ExeName pour une DLL
    Par Smortex dans le forum Langage
    Réponses: 7
    Dernier message: 16/07/2002, 21h07
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

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