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 :

Récupérer les plages de dates consécutives [2008R2]


Sujet :

Développement SQL Server

  1. #1
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut Récupérer les plages de dates consécutives
    Bonjour,

    J'ai une table (voir DDL plus bas) dans laquelle sont stockées des dates (DAT_DATE) et des numéros de magasin (STR_ID). Je cherche à récupérer pour un magasin donné, les plages de dates qui sont consécutives et je ne vois pas du tout comment écrire ce genre de requêtes.

    Le résultat souhaité serait de la forme suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id magasin | date début | date fin
    DDL de la table concernée
    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
    CREATE TABLE [S_OPERATIONAL].[T_INVENTORY_INV](
        [DAT_DATE] [date] NOT NULL,
        [STR_ID] [tinyint] NOT NULL,
        [INV_CREATED_ON] [datetime] NOT NULL,
        [INV_CREATED_BY] [varchar](100) NOT NULL
    PRIMARY KEY CLUSTERED 
    (
        [DAT_DATE] ASC,
        [STR_ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
     
    GO
     
    SET ANSI_PADDING OFF
    GO
     
    ALTER TABLE [S_OPERATIONAL].[T_INVENTORY_INV] ADD  DEFAULT (getdate()) FOR [INV_CREATED_ON]
    GO
     
    ALTER TABLE [S_OPERATIONAL].[T_INVENTORY_INV] ADD  DEFAULT (suser_sname()) FOR [INV_CREATED_BY]
    GO
     
    ALTER TABLE [S_OPERATIONAL].[T_INVENTORY_INV]  WITH CHECK ADD FOREIGN KEY([DAT_DATE])
    REFERENCES [dbo].[TR_DATE_DAT] ([DAT_DATE])
    GO
     
    ALTER TABLE [S_OPERATIONAL].[T_INVENTORY_INV]  WITH CHECK ADD FOREIGN KEY([STR_ID])
    REFERENCES [dbo].[T_STORE_STR] ([STR_ID])
    GO
    Kropernic

  2. #2
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Points : 1 049
    Points
    1 049
    Par défaut
    Avec un jeu d'essai, on pourrait t'aider ;-)
    Sinon j'imagine qu'avec un DATEDIFF et une CTE tu devrais t'en sortir. Mais l'idéal serait peut être d'avoir une table calendrier ?
    Blog Perso | Kankuru (logiciel gratuit pour SQL Server)

  3. #3
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Je n'ai pas encore de jeu d'essai (mais je pourrais en créer un facilement).

    Pour la table calendrier, elle existe déjà. C'est la table TR_DATE_DAT et qui est référencée d'ailleurs par la table qui nous occupe.

    Et donc tu ferais comment avec une table calendrier (vu que ça a l'air facile selon toi ^^) ??
    Kropernic

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Ça se fait très bien avec la méthode tabibitosan.

    Ce cas-là doit être proche de ce que vous voulez faire :
    http://www.developpez.net/forums/d97...enation-dates/

    C'est dans le forum Oracle, mais les techniques utilisées fonctionneront aussi sur votre version de SQL-Server.

  5. #5
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Je vais regarder cela tout de suite.

    Merci !

    EDIT :
    Fallait y penser ! Ordonner les dates, utiliser row number et le soustraire à la date pour faire un groupe sur le résultat. Merci pour l'astuce, je l'utiliserai souvent à mon avis !

    J'imagine qu'on doit pouvoir utiliser le même genre de technique pour regrouper des nombres entiers non ?
    Kropernic

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

Discussions similaires

  1. [DeskI V5-V6] Récupérer une plage de date dans plusieurs requêtes
    Par dufrane dans le forum Débuter
    Réponses: 1
    Dernier message: 08/10/2010, 11h17
  2. Réponses: 5
    Dernier message: 10/05/2010, 11h46
  3. Réponses: 11
    Dernier message: 05/06/2008, 11h04
  4. [Utilisation] Récupérer les modifications depuis une date donnée
    Par Sapience dans le forum CVS
    Réponses: 1
    Dernier message: 15/02/2006, 12h08
  5. [CR]Aide sur les fonction de date et plage de date.
    Par Job dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 08/11/2005, 09h19

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