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 SQL Group By spécifique [2012]


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2015
    Messages : 27
    Par défaut Requête SQL Group By spécifique
    Bonjour,

    Je bloque complètement sur une requête SQL.

    J'ai une table journalière de poste de salariés nommées HOPHJOUP.
    Exemple simplifié de la la table avec les champs qui m'intéressent :

    MATRI DAT SEIFONCTIO
    2684 2016-09-04 Développeur informatique
    2684 2016-09-05 Développeur informatique
    2684 2016-09-06 Développeur informatique
    2684 2016-09-07 Architecte BDD
    2684 2016-09-08 Architecte BDD
    2684 2016-09-09 Développeur informatique
    2684 2016-09-10 Développeur informatique

    Le but est d'obtenir
    MATRI DATDEBUT DATFIN SEIFONCTIO
    2684 2016-09-04 2016-09-06 Développeur informatique
    2684 2016-09-07 2016-09-08 Architecte BDD
    2684 2016-09-09 2016-09-10 Développeur informatique

    Pour le moment je n'arrive qu'à obtenir ça
    MATRI DATDEBUT DATFIN SEIFONCTIO
    2684 2016-09-04 2016-09-10 Développeur informatique
    2684 2016-09-07 2016-09-08 Architecte BDD

    Merci par avance pour votre aide

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Quelle requête a permis d'obtenir ce résultat ?
    Quelle est la règle fonctionnelle qui décrit le résultat attendu ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    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 : 22 002
    Billets dans le blog
    6
    Par défaut
    Rien de compliqué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT MATRI, MIN(DAT) AS DATE_DEBUT, MAX(DAT) AS DATE_FIN, SEIFONCTIO
    FROM   ...
    GROUP  BY MATRI, SEIFONCTIO
    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/ * * * * *

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2015
    Messages : 27
    Par défaut
    Bonjour,

    Merci pour vos réponses.

    Ma première requête est exactement celle donnée par SQLpro. Mais elle ne répond pas à mon besoin car elle regroupe tout sans tenir compte du séparateur de SEIFONCTIO "Architecte BDD" situé entre les deux dates.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT MATRI, MIN(DAT) AS DATE_DEBUT, MAX(DAT) AS DATE_FIN, SEIFONCTIO
    FROM   ...
    GROUP  BY MATRI, SEIFONCTIO
    L'idée est de regrouper toutes les suites de fonction tout en les séparant si entre deux dates il y en a une autre
    exemple :
    01 novembre : Assistant RH
    02 novembre : Assistant RH
    03 novembre : Assistant RH
    04 novembre : Assistant RH
    05 novembre : Assistant RH
    06 novembre : Assistant RH
    07 novembre : Assistant RH

    08 novembre : RH
    09 novembre : RH
    10 novembre : RH
    11 novembre : RH
    12 novembre : RH
    13 novembre : RH
    14 novembre : DRH
    15 novembre : DRH
    16 novembre : DRH
    17 novembre : Assistant RH
    18 novembre : Assistant RH
    19 novembre : Assistant RH


    Si je fais une requête GROUP BY classique sur cette table je vais grouper mes deux suites de "Assistant RH" alors que je veux les séparer car il y a eu une autre fonction entre les dates.

    Non voulu (GROUP BY classqiue comme proposé par SQLpro) :
    01 novembre à 19 novembre : Assistant RH

    Souhaité :
    01 novembre à 07 novembre : Assistant RH
    17 novembre à 19 novembre : Assistant RH

    Je ne sais pas si je suis très clair mais ce besoin n'est pas forcément très simple à exprimer.

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    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 : 22 002
    Billets dans le blog
    6
    Par défaut
    Alors il faut faire une requête récursive en chainant les dates pour le même couple matricule/fonction.

    SI vous voulez plus d'aide, merci de respecter la charte de postage : https://www.developpez.net/forums/d9...vement-poster/

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

  6. #6
    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
    Par défaut
    Bonjour,

    comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    WITH rupt AS (
    	SELECT *, CASE WHEN SEIFONCTIO = LAG(SEIFONCTIO) OVER(PARTITION BY MATRI ORDER BY DAT) THEN 0 ELSE 1 END AS rupture
    	FROM HOPHJOUP
    ), Grp AS (
    	SELECT *, SUM(rupture) OVER(PARTITION BY MATRI ORDER BY DAT) AS Groupe
    	FROM rupt
    )
    SELECT MATRI, MIN(DAT) AS DATDEBUT, MAX(DAT) AS DATFIN, SEIFONCTIO
    FROM Grp
    GROUP BY MATRI, SEIFONCTIO, Groupe

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

Discussions similaires

  1. [AC-2010] VBA, Requête SQL, Group By
    Par MitchP dans le forum Access
    Réponses: 2
    Dernier message: 18/11/2014, 09h51
  2. Requête SQL Group by
    Par Razorflak dans le forum Langage SQL
    Réponses: 5
    Dernier message: 12/09/2013, 17h51
  3. Requête SQL avec UNION, sum et GROUP BY
    Par Guitariff dans le forum Langage SQL
    Réponses: 6
    Dernier message: 03/12/2006, 13h48
  4. Requête SQL - Pb avec la clause GROUP BY
    Par jeromesco dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 10/07/2006, 09h04
  5. [Access] Requète SQL Group By, Order By and Co
    Par zoidy dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/06/2006, 14h37

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