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 :

[2k8R2] Requête de regroupement


Sujet :

Développement SQL Server

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 28
    Points : 26
    Points
    26
    Par défaut [2k8R2] Requête de regroupement
    J'ai des données qui se présentent sous cette forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT TOP 1000 [DateValeur]
          ,[IdPoint]
          ,[ValeurDecimale]
          ,[ValeurNotes]
      FROM [Main].[dbo].[ValeurSchema]

    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
    DateValeur	IdPoint	ValeurDecimale	ValeurNotes
    2010-02-01 00:05:00.000	3	0	
    2010-02-01 00:05:00.000	7	0	
    2010-02-01 00:05:00.000	11	140	
    2010-02-01 00:05:00.000	15	40	
    2010-02-01 00:05:00.000	19	190	
    2010-02-01 00:05:00.000	23	40	
    2010-02-01 00:05:00.000	27	606	
    2010-02-01 00:05:00.000	108	0	FREECOOL
    2010-02-01 00:16:00.000	3	0	
    2010-02-01 00:16:00.000	7	0	
    2010-02-01 00:16:00.000	11	140	
    2010-02-01 00:16:00.000	15	40	
    2010-02-01 00:16:00.000	19	190	
    2010-02-01 00:16:00.000	23	40	
    2010-02-01 00:16:00.000	27	606	
    2010-02-01 00:16:00.000	108	0	CHAUD

    C'est un système basé sur des points,
    Chaque point à telle date prend une valeur (compteur)
    Il y a le point 108 qui pour ces même dates ne prendra pas de valeur mais un état valable pour tous les autres points ( chaud, froid, freecool)

    Le but du jeu est de grouper les points ( hormis 108) selon la date et l'état du point 108

    Pour FREECOOL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DateValeur	IdPoint	ValeurDecimale
    2010-02-01 00:05:00.000	3	0	
    2010-02-01 00:05:00.000	7	0	
    2010-02-01 00:05:00.000	11	140	
    2010-02-01 00:05:00.000	15	40	
    2010-02-01 00:05:00.000	19	190	
    2010-02-01 00:05:00.000	23	40	
    2010-02-01 00:05:00.000	27	606
    Pour CHAUD:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DateValeur 	IdPoint	ValeurDecimale
    2010-02-01 00:16:00.000	3	0	
    2010-02-01 00:16:00.000	7	0	
    2010-02-01 00:16:00.000	11	140	
    2010-02-01 00:16:00.000	15	40	
    2010-02-01 00:16:00.000	19	190	
    2010-02-01 00:16:00.000	23	40	
    2010-02-01 00:16:00.000	27	606
    Je débute en SQL, toute aide sera la bienvenue
    Merci.

  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 760
    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 760
    Points : 52 541
    Points
    52 541
    Billets dans le blog
    5
    Par défaut
    Le groupage est une opération statistique. Rien à voir avec votre demande !
    Ce que vous voulez est tout simplement de restituer les lignes qui ont la même date heure que la ligne du point 108 dans un état donné (chaud, froid, freecool)

    Il faut donc deux requêtes :
    1) l'un qui retrouve la dateheure du point 108 à l'état voulu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DateValeur FROM ValeurSchema WHERE IdPoint = 108 AND ValeurNotes = 'FREECOOL'
    2) l'autre qui partant de cette valeur, trouve le reste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM ValeurSchema WHERE DateValeur  = ???
    Il ne suffit plus que de remplacer ??? par la sous requête exprimée en 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT * 
    FROM   ValeurSchema 
    WHERE  DateValeur  = (SELECT DateValeur 
                          FROM   ValeurSchema 
                          WHERE  IdPoint = 108 
                            AND  ValeurNotes = 'FREECOOL')
    A lire sur les sous requêtes : http://sqlpro.developpez.com/cours/sqlaz/sousrequetes/

    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 membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 28
    Points : 26
    Points
    26
    Par défaut
    Merci ! je partais sur une mauvaise solution et plus compliquée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    WITH ChoiceNotes AS (
          SELECT DateValeur
          FROM ValeurSchema
          Where valeurnotes='chaud'
          )
     
    SELECT TOP 1000 [IdPoint]
          ,[DateValeur]
          ,[ValeurDecimale]
          ,[ValeurNotes]
      FROM [Main].[dbo].[ValeurSchema]
     where DateValeur = ChoiceNotes.DateValeur

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

Discussions similaires

  1. [Requête] [03] Regrouper 2 tables
    Par NiKoTiNe dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 27/04/2007, 10h50
  2. [Requête][97] Regroupment du champs Date
    Par majnoune dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 17/04/2007, 15h32
  3. requête de regroupement
    Par bouba_95 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 08/01/2007, 10h30
  4. [MySQL] Problème de requête de regroupement
    Par zoom61 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/08/2006, 14h43
  5. Requête sql regroupement de dates
    Par rocs dans le forum Langage SQL
    Réponses: 1
    Dernier message: 28/07/2005, 16h40

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