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

Langage SQL Discussion :

Aide requête SQL COUNT HAVING complexe


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Juin 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Juin 2019
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Aide requête SQL COUNT HAVING complexe
    Bonjour à tous,

    Tout d'abord je tenais à remercier le forum, je n'avais jamais utilisé SQL avant il y a qqes mois, et grâce à celui-ci j'ai pu réussir à produire les requêtes que je voulais, pas toujours sans mal ... jusqu'à aujourd'hui

    Je ne vois plus par quel bout prendre ma requête, j'espère donc que vous pourrez m'aider.
    A l'heure actuelle j'obtiens le résultat que je veux via une macro Excel (connexion ODBC vers la table puis qqes formules derrière) mais c'est assez lourd (table très grosse) et je suis sur que ce doit être possible bcp plus facilement directement en requête SQL.

    Voici donc un bout de ma table (infos modifiées bien sur) :

    idBDD IDITSM Création Modif Etat Groupe_Affecte
    202 024 2019-06-12 20:32:15 2019-06-12 21:00:32 En cours GroupeA
    208 024 2019-06-12 20:32:15 2019-06-13 14:10:34 En cours GroupeA
    215 024 2019-06-12 20:32:15 2019-06-14 00:00:36 En cours GroupeB
    247 028 2019-06-13 23:40:33 2019-06-14 00:06:33 En attente GroupeD
    248 028 2019-06-13 23:40:33 2019-06-14 00:06:37 En cours GroupeB
    249 028 2019-06-13 23:40:33 2019-06-14 00:06:54 En cours GroupeD
    296 032 2019-06-14 00:08:07 2019-06-14 00:08:06 En cours GroupeC
    297 032 2019-06-14 00:08:07 2019-06-14 00:08:07 En cours GroupeC

    Mon besoin :
    Avoir un COUNT, par Groupe_Affecte, pour une date Modif spécifiée dans la requête, de chaque changement de Groupe par rapport à l'entrée précédente ou par rapport à la suivante, sur le même IDITSM (l'entrée précédente / suivante peut s'identifer via le champ idBDD)

    Résultat attendu avec l'exemple ci-dessus :
    Groupe COUNT1 (Groupe d'avant différent) COUNT2(Groupe d'après différent)
    GroupeA 0 1
    GroupeB 1 1
    GroupeC 0 0
    GroupeD 1 0

    J'espère que j'ai réussi à être clair et que SQL permet de faire ce genre de choses.
    J'ai réussi à faire le COUNT qui va bien pour afficher le nombre d'occurences par Groupe, mais je ne réussis pas à trouver comment compter uniquement les changements de groupe sur un même ID

    Qu'il y ait une solution ou pas, je vous remercie par avance de m'avoir lu

  2. #2
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 152
    Points : 7 402
    Points
    7 402
    Billets dans le blog
    1
    Par défaut
    Je ne suis pas sûr d'avoir bien compris le besoin, mais j'ai l'impression que vous avez besoin des fonctions LEAD et LAG : https://docs.microsoft.com/fr-fr/sql...ql-server-2017
    On ne jouit bien que de ce qu’on partage.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 731
    Points : 1 416
    Points
    1 416
    Par défaut
    Bonjour,
    Mon besoin :
    Avoir un COUNT, par Groupe_Affecte, pour une date Modif spécifiée dans la requête, de chaque changement de Groupe par rapport à l'entrée précédente ou par rapport à la suivante, sur le même IDITSM (l'entrée précédente / suivante peut s'identifer via le champ idBDD)
    Pas compris

    Avoir un COUNT, : j'imagine qu'il faut prendre ça au sens large = avoir un dénombrement
    par Groupe_Affecte, : Vu le résultat c'est un regroupement
    pour une date Modif spécifiée dans la requête, : Laquelle ? sur quelle colonne ? la date heure ou la journée complète ?
    de chaque changement de Groupe par rapport à l'entrée précédente : ça c'est ce qu'on compte
    ou par rapport à la suivante, : vu le résultat, on le compte aussi
    sur le même IDITSM : est-ce la règle de continuité ? Comment compte t'on la première entrée ? par exemple si on ne retient que les 3 premières lignes de l’exemple on n'a que GroupeA et GroupeB, vu que GroupeB "arrive" en dernier on doit dénombrer +1. Mais qu'elle est la valeur pour GroupeA ?
    Le savoir est une nourriture qui exige des efforts.

  4. #4
    Candidat au Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Juin 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Juin 2019
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Je ne suis pas sûr d'avoir bien compris le besoin, mais j'ai l'impression que vous avez besoin des fonctions LEAD et LAG : https://docs.microsoft.com/fr-fr/sql...ql-server-2017
    Merci je ne connaissais pas ces fonctions, ça semble bien correspondre à mon besoin. Je vais tester ça

    Citation Envoyé par Michel.Priori Voir le message
    Bonjour,

    Pas compris

    Avoir un COUNT, : j'imagine qu'il faut prendre ça au sens large = avoir un dénombrement => tout à fait
    par Groupe_Affecte, : Vu le résultat c'est un regroupement => c'est bien cela
    pour une date Modif spécifiée dans la requête, : Laquelle ? sur quelle colonne ? la date heure ou la journée complète ? => Sur la colonne "Modif", avec une recherche sur la journée complète (pas de prise en compte des heures nécessaires). Potentiellement la recherche pourra d'ailleurs porter sur une plage plus importante qu'une journée
    de chaque changement de Groupe par rapport à l'entrée précédente : ça c'est ce qu'on compte => oui
    ou par rapport à la suivante, : vu le résultat, on le compte aussi => oui
    sur le même IDITSM : est-ce la règle de continuité ? Comment compte t'on la première entrée ? par exemple si on ne retient que les 3 premières lignes de l’exemple on n'a que GroupeA et GroupeB, vu que GroupeB "arrive" en dernier on doit dénombrer +1. Mais qu'elle est la valeur pour GroupeA ? => L'idée est en fait de compter le nombre d'entrées / sortie par groupe. Si on ne prend que les 3 premières lignes, il y a donc 0 entrée et 1 sortie du du groupe A (illustrées respectivement par les colonnes COUNT1 et COUNT2 ds mon résultat). Le groupe B quant à lui se voit compter 1 entrée et 0 sortie

    Groupe COUNT1 (Groupe d'avant différent) COUNT2(Groupe d'après différent)
    GroupeA 0 1
    GroupeB 1 0

    J'espère que j'ai réussi à être plus clair. Merci beaucoup pour ton aide dans tous les cas

  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,

    êtes-vous certain du résultat attendu ? ça ne semble pas correspondre aux explications (ou alors je ne les ai pas comprise)

    Par exemple, pourquoi seulement 1 et pas 2 pour le COUNT1 du groupe B ?
    puisque passage du groupe A eu groupe B pour IDITSM 24 (le 2019-06-14 00:00:36)
    et passage du groupe D au groupe B pour IDTSM 28 le 2019-06-14 00:06:37

    est-ce que cette requete vous done les résultats voulus ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    WITH tmp AS (
    SELECT 
    	Groupe_affecte AS Groupe
    	,CASE WHEN LAG(Groupe_Affecte)  OVER(PARTITION BY IDITSM ORDER BY Modif)<> Groupe_Affecte THEN 1 ELSE 0 END AS modifAvant
    	,CASE WHEN LEAD(Groupe_Affecte) OVER(PARTITION BY IDITSM ORDER BY Modif) <> Groupe_Affecte THEN 1 ELSE 0 END AS modifApres
    FROM LaTable
    )
    SELECT 
    		Groupe
    	,	SUM(modifAvant) AS Count1
    	,	SUM(modifApres) AS Count2
    FROM tmp
    GROUP BY Groupe

Discussions similaires

  1. Requête SQL avec Having Count
    Par illight dans le forum Langage SQL
    Réponses: 9
    Dernier message: 22/10/2013, 14h00
  2. Aide Requête SQL
    Par jjg65 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/07/2007, 10h37
  3. Aide requête SQL - UPDATE phpmyadmin
    Par laulau37 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/06/2007, 10h19
  4. Aide requête sql
    Par viny dans le forum PostgreSQL
    Réponses: 18
    Dernier message: 14/09/2006, 21h31
  5. Aide Requête SQL (UPDATE)
    Par Glowprod dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/07/2006, 14h04

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