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 :

[2005]découper un intervalle en plusieurs


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Avril 2009
    Messages : 4
    Points : 5
    Points
    5
    Par défaut [2005]découper un intervalle en plusieurs
    Bonjour,

    Je suis à la recherche d'une procédure qui permet de découper un intervalle en plusieurs autres, suivant un critère de découpe du type meme journée, ou meme heure.

    J'ai deux tables A et B.

    Table A:
    Name Type
    ----------- --------
    PK_A BIGINT
    START DATETIME
    END DATETIME

    Table B:
    Name Type
    ----------- --------
    PK_B BIGINT
    FK_A BIGINT
    START DATETIME
    END DATETIME

    Voici un extrait de la table A
    SQL> SELECT * FROM A;
    PK_A START END
    1 01/01/2008 15:15:08 03/01/2008 16:17:37

    La table B doit contenir les même informations de la table A, mais en découpant l'intervalle (START,END) suivant un critère.
    Si le critère de découpe est suivant la meme journèe, on aurai ceci.

    SQL> SELECT * FROM B;
    PK_B FK_A START END
    1 1 01/01/2008 15:15:08 01/01/2008 23:59:59
    2 1 02/01/2008 00:00:00 02/01/2008 23:59:59
    3 1 03/01/2008 00:00:00 03/01/2008 16:17:37

  2. #2
    Membre confirmé Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Points : 478
    Points
    478
    Par défaut Allez un peu de pub
    Bonsoir,

    Allez un peu de pub , la réponse est ici: http://www.bluecaret.com/hexabytes/p...-Solution.aspx

    @+

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Avril 2009
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Salut,

    Merci pour le lien, pour ceux que ça interesse voici le script après l'avoir adapté pour mon problème.

    WITH CTE_Event (Event_ID, Event_Start_Time ,Event_End_Time) AS (
    SELECT DISTINCT Event_ID,
    Event_Start_Time,
    isnull(Event_End_Time,GETDATE ( )) --Remplacer par la date courante, si la fin n'est pas connue
    FROM dbo.Event
    UNION ALL
    SELECT Event_ID,
    DATEADD(day, 1, Event_Start_Time), --Seule la date de debut sera incrémentée de 1 s'il y a un ecart d'une journee entre le debut et la fin (+Reboucler)
    Event_End_Time
    FROM CTE_Event WHERE datediff(day,Event_Start_Time,Event_End_Time)<>0 )

    SELECT Event_ID,
    CASE WHEN ROW_NUMBER()over(PARTITION BY Event_ID ORDER BY Event_Start_Time ,Event_End_Time )<>1
    THEN dateadd(dd, -datediff(dd, Event_Start_Time, 1), 1) --On élimine l'information du temps
    ELSE Event_Start_Time --Si c'est la 1ere capture de cet événement, on garde l'information temps
    END Event_Start_Time,
    CASE WHEN datediff(day,Event_Start_Time,Event_End_Time)<>0 --S'il y a un ecart d'au moins une journée entre le debut et la fin de l'evenement
    THEN dateadd(s,-1,dateadd(dd, -datediff(dd, Event_Start_Time, 1), 2)) --On met à à 23h59m59 la date de fin
    ELSE Event_End_Time
    END Event_End_Time
    FROM
    CTE_Event ORDER BY Event_ID, Event_Start_Time ,Event_End_Time
    OPTION (MAXRECURSION 32767);
    Event_ID Event_Start_Time Event_End_Time
    1 2008-08-01 12:29:34.710 2008-08-01 23:59:59.000
    1 2008-08-02 00:00:00.000 2008-08-02 23:59:59.000
    1 2008-08-03 00:00:00.000 2008-08-03 23:14:28.197
    2 2008-08-01 12:30:59.257 2008-08-01 23:59:59.000
    2 2008-08-02 00:00:00.000 2008-08-02 23:59:59.000
    2 2008-08-03 00:00:00.000 2008-08-03 23:59:59.000
    2 2008-08-04 00:00:00.000 2008-08-04 07:48:02.843

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

Discussions similaires

  1. Découper une classe en plusieurs fichiers de code
    Par Christophe_ dans le forum Visual Studio
    Réponses: 1
    Dernier message: 21/06/2007, 21h54
  2. Réponses: 3
    Dernier message: 04/06/2007, 13h29
  3. découper un frame en plusieurs zones
    Par gerard tarquin dans le forum wxPython
    Réponses: 4
    Dernier message: 13/05/2007, 13h27
  4. Découper un formulaire en plusieurs pages
    Par wanou44 dans le forum ASP
    Réponses: 7
    Dernier message: 13/04/2007, 19h51
  5. Réponses: 2
    Dernier message: 07/09/2006, 13h17

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