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 :

Recuperation de périodes via dates


Sujet :

MS SQL Server

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2013
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Recuperation de périodes via dates
    Bonjour,

    Je cherche à récupérer les dates de début et de fin de périodes à partir d'une base de donnée constitué comme ceci :
    Activité | Date
    CP | 2013-03-03 00:00:00.000
    CP | 2013-04-03 00:00:00.000
    CP | 2013-05-03 00:00:00.000
    CP | 2013-06-03 00:00:00.000
    CP | 2013-07-03 00:00:00.000
    CP | 2013-04-03 00:00:00.000
    CP | 2013-03-03 00:00:00.000
    CP | 2013-10-03 00:00:00.000
    CP | 2013-11-03 00:00:00.000
    CP | 2013-12-03 00:00:00.000

    La requête doit me sortir avec la mise en forme :"Du 03/03/2013 au 07/03/2013, du 10/03/2013 au 12/03/2013"

    Est ce que quelqu'un à une idée ?
    Merci d'avance.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 : 21 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Implementez un calendrier comme indiqué dans un de mes articles plus cherchez les "trous".

    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/ * * * * *

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2013
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Merci, mais...
    Merci, mais je ne vois pas bien en quoi cela va m'aider d'avoir les "trous".

    Mon intérêt est d'obtenir la date de début et de fin de chaque période présent dans ma base mais aussi de la mettre en forme de manière spécifique en sortie.

    Après si vous m'expliquez plus le fond de votre pensée peut-être est-ce effectivement la solution.

  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
    21 772
    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 : 21 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Chaque trou vous indiquera le jour d'avant et d'après de vos périodes...

    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
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Vous pouvez faire ainsi :

    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
     
    SELECT  
    	'du ' 
    	+ CONVERT(CHAR(10), debut.dte , 103) 
    	+ ' au ' 
    	+ CONVERT(CHAR(10), MIN(fin.dte), 103)
    FROM	cte debut
    LEFT JOIN cte CDebut
    	ON DATEADD(DAY, 1, CDebut.dte) = debut.dte
    INNER JOIN cte fin
    	ON	fin.dte > debut.dte
    LEFT JOIN cte CFin
    	ON DATEADD(DAY, -1, Cfin.dte) = fin.dte
    WHERE	CDebut.dte IS NULL 
    	AND CFin.dte IS NULL
    GROUP BY debut.dte

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2013
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Aie..
    Bon cela ressemble beaucoup à ce que je souhaite faire, mais je ne retrouve pas mes petits dans votre exemple.

    Ou est l'accès à ma table ?

    Pour couronner le tout et rajouter un peu de complexité, la première période doit être "Du 03/03/2013 au 07/03/2013" et la seconde ", du 10/03/2013 au 12/03/2013". Les caractères ", " sont importants. Pour cela je pensais plutôt générer dès le début ", du 03/...." puis tronquer les deux premiers caractères. Qu'en pensez vous ?

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par Ulixes Voir le message
    Ou est l'accès à ma table ?
    Vous n'avez pas donné le nom de votre table, ni le vrai nom de la colonne, donc dans mon exemple, "cte" c'est votre table, et "dte" le nom de la colonne contenant la date

    Pour couronner le tout et rajouter un peu de complexité, la première période doit être "Du 03/03/2013 au 07/03/2013" et la seconde ", du 10/03/2013 au 12/03/2013". Les caractères ", " sont importants. Pour cela je pensais plutôt générer dès le début ", du 03/...." puis tronquer les deux premiers caractères. Qu'en pensez vous ?
    Vous pouvez faire comme ça :
    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
     
    ;WITH tmp AS(
    	SELECT  
    		'du ' 
    		+ CONVERT(CHAR(10), debut.dte , 103) 
    		+ ' au ' 
    		+ CONVERT(CHAR(10), MIN(fin.dte), 103) as periode
    		,
    		RANK() OVER (ORDER BY debut.dte) AS Rang
    	FROM	cte debut
    	LEFT JOIN cte CDebut
    		ON DATEADD(DAY, 1, CDebut.dte) = debut.dte
    	INNER JOIN cte fin
    		ON	fin.dte > debut.dte
    	LEFT JOIN cte CFin
    		ON DATEADD(DAY, -1, Cfin.dte) = fin.dte
    	WHERE	CDebut.dte IS NULL 
    		AND CFin.dte IS NULL
    	GROUP BY debut.dte
    ),
    res as (
    	SELECT rang, CAST(periode AS VARCHAR(MAX)) as periode
    	FROM tmp
    	WHERE Rang = 1
    	UNION ALL
    	SELECT tmp.rang, res.periode + ', ' + tmp.periode
    	FROM tmp
    	INNER JOIN res
    		ON tmp.rang = res.rang + 1
    )
    SELECT MAX(periode)
    FROM res
    Mais pourquoi tenez vous à obtenir le résultat sous cette forme. La requête pourrait remonter directement les dates ordonnées au programme, qui se chargerait de créer la chaine voulue, car manipuler des chaines ainsi, ce n'est pas le fort des SGBDR...

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2013
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Re,
    Bonsoir et merci,

    Tout d'abord je comprends beaucoup mieux et c'est effectivement ce que je cherche à faire. Je le testerais demain.

    Pour répondre à votre question, je me rends bien compte que ce n'est pas le fort des SGBDR mais je dois via SQL extraire des données d'un logiciel et les exporter dans le format attendu d'un autre. Plus simplement interface entre un logiciel de gestion d'activité et un logiciel de gestion de paye.

    Je vous tiens au courant de l'avancement...

Discussions similaires

  1. Recuperer un objet via ArrayList avec Position connu
    Par maxf1 dans le forum Struts 1
    Réponses: 2
    Dernier message: 15/01/2007, 16h51
  2. Recuperer les max des dates à partir d'une autre table
    Par inabil dans le forum Langage SQL
    Réponses: 8
    Dernier message: 20/11/2006, 15h19
  3. Recupere un fichier via HTTP
    Par kedare dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 31/10/2006, 19h13
  4. Réponses: 4
    Dernier message: 09/06/2006, 13h52
  5. recuperer un site via FTP
    Par m@thieu dans le forum Balisage (X)HTML et validation W3C
    Réponses: 19
    Dernier message: 11/02/2005, 19h59

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