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 :

[SQL-SERVER]Cumuls de valeurs pour un temps donné


Sujet :

MS SQL Server

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17
    Par défaut [SQL-SERVER]Cumuls de valeurs pour un temps donné
    Bonjour,
    Voici mon problème:
    j'ai une table du type:

    EQ_Name_________________Value______DateHisto
    Balise_106_3_A_Alpha_______897_______2011-01-05 12:31:29.2410000
    Balise_106_3_A_Alpha_______25________2011-01-05 12:31:32.2410000
    Balise_106_3_A_Alpha_______400_______2011-01-05 12:31:35.2410000

    et je voudrai ajouter une colonne cumuls des valeurs de 'Value' (A T0 cumuls = 0)

    EQ_Name______________Value______DateHisto __________________Cumuls
    Balise_106_3_A_Alpha____897_______2011-01-05 12:31:29.2410000__0
    Balise_106_3_A_Alpha____25________2011-01-05 12:31:32.2410000__25
    Balise_106_3_A_Alpha____400_______2011-01-05 12:31:35.2410000__425


    J'ai essayé cette requête trouvé pour oracle mais ca ne fonctionne pas sur sql-server:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  
          [EQ_NAME]
          ,[Value]
          ,[DateHisto]
          ,sum(Value) over(partition by EQ_NAME order by DateHisto) as cumuls
      FROM [PanoIT].[dbo].[Histo_Flat]
    Si quelqu'un a une idée de comment faire...

  2. #2
    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,

    1/ quelle est votre version de SQL Server ?

    2/ Avez-vous une contrainte d'unicité sur (EQ_Name, DateHisto) ?

  3. #3
    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
    Re,

    Essayez ceci, qui fonctionne si vous avez la contrainte d'unicité, et que vous êtes au moins en SQL Server 2005 (pour les CTE)

    Code sql : 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
    33
    34
    35
     
    DECLARE @Histo TABLE(
    	Lib		VARCHAR(50)
    	,Val	INT
    	,Dte	DATETIME
    	)
     
    INSERT INTO @Histo VALUES('Balise_106_3_A_Alpha',897, '2011-01-05 12:31:29.241')
    INSERT INTO @Histo VALUES('Balise_106_3_A_Alpha',25,'2011-01-05 12:31:32.241')
    INSERT INTO @Histo VALUES('Balise_106_3_A_Alpha',400,'2011-01-05 12:31:35.241')
    INSERT INTO @Histo VALUES('Balise_106_3_B_Alpha',897, '2011-01-05 12:31:29.241')
    INSERT INTO @Histo VALUES('Balise_106_3_B_Alpha',24,'2011-01-05 12:31:32.241')
    INSERT INTO @Histo VALUES('Balise_106_3_B_Alpha',400,'2011-01-05 12:31:35.241')
     
    ;WITH CTE (Lib, Val, Dte, Somme) AS (
    	SELECT Lib, Val, Dte, 0
    	FROM(
    		SELECT lib, val,Dte, MIN(Dte) OVER(PARTITION BY Lib) AS MinDte
    		FROM @Histo H
    	)Tmp
    	WHERE Dte = MinDte	
    	UNION ALL
    	SELECT Lib, Val, Dte, Somme
    	FROM(
    		SELECT H.lib, H.val,H.Dte, MIN(H.Dte) OVER(PARTITION BY H.Lib) AS MinDte, CTE.Somme + H.val AS Somme
    		FROM @Histo H
    		INNER JOIN CTE ON CTE.Lib = H.Lib
    		WHERE H.Dte > CTE.Dte
    	)Tmp
    	WHERE Dte = MinDte	
     
    )
    SELECT Lib, Val, Dte, Somme
    FROM CTE
    ORDER BY Lib, Dte

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17
    Par défaut
    Merci pour ta reponse
    Alors ma version de SQL-Server est 2008R2

    Je ne sait pas comment on vois s'il y a des contrainte d'unicité (je suis débutant...)

  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
    Par défaut
    Citation Envoyé par miczl57 Voir le message
    Merci pour ta reponse
    Alors ma version de SQL-Server est 2008R2
    C'est déjà une bonne nouvelle

    Je ne sait pas comment on vois s'il y a des contrainte d'unicité (je suis débutant...)
    Dans management studio, clique droit sur la table > script table as > create to > new query window...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17
    Par défaut
    Alors voici ce que j'obtient:
    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
    USE [PanoIT]
    GO
     
    /****** Object:  View [dbo].[Histo_Flat]    Script Date: 01/19/2011 15:44:15 ******/
    SET ANSI_NULLS ON
    GO
     
    SET QUOTED_IDENTIFIER ON
    GO
     
     
    CREATE VIEW [dbo].[Histo_Flat]
    AS
    SELECT     [Private].Raw_Histo.Id, [Private].Raw_Histo.RefData AS RefData,
                          [Private].Raw_Desc_Data.Name AS IT_NAME, 
                          [Private].Raw_Desc_Data.Info AS IT_INFO, [Private].Raw_Desc_Equip.Name AS EQ_NAME, [Private].Raw_Desc_EquipTypes.Name AS EQ_TYPE, 
                          [Private].Raw_Desc_EquipModels.Name AS EQ_MODEL, [Private].Raw_Desc_Equip.Info AS EQ_INFO, [Private].Raw_Desc_DataGroups.Name AS IT_GROUP, 
                          [Private].Raw_Desc_Data.Priority, [Private].Raw_Desc_Categories.Name AS IT_CAT, [Private].Raw_Desc_Sites.Name AS IT_SITE_NAME, 
                          [Private].Raw_Desc_Sites.Info AS IT_SITE_INFO, [Private].Raw_Histo.Value,
                          [Private].Raw_Histo.DateHisto AS DateHisto, [Private].Raw_Histo.DateHistoUTC AS DateHistoUTC
    FROM         [Private].Raw_Histo INNER JOIN
                          [Private].Raw_Desc_Data ON [Private].Raw_Desc_Data.Id = [Private].Raw_Histo.RefData INNER JOIN
                          [Private].Raw_Desc_Equip ON [Private].Raw_Desc_Equip.Id = [Private].Raw_Desc_Data.RefEquip INNER JOIN
                          [Private].Raw_Desc_DataGroups ON [Private].Raw_Desc_DataGroups.Id = [Private].Raw_Desc_Data.RefDataGroup INNER JOIN
                          [Private].Raw_Desc_EquipModels ON [Private].Raw_Desc_EquipModels.Id = [Private].Raw_Desc_Equip.RefEquipModel INNER JOIN
                          [Private].Raw_Desc_EquipTypes ON [Private].Raw_Desc_EquipTypes.Id = [Private].Raw_Desc_EquipModels.RefEquipType INNER JOIN
                          [Private].Raw_Desc_Categories ON [Private].Raw_Desc_Categories.Id = [Private].Raw_Desc_Data.RefCategory INNER JOIN
                          [Private].Raw_Desc_Sites ON [Private].Raw_Desc_Sites.Id = [Private].Raw_Desc_Equip.RefSite
     
    GO

  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
    Par défaut
    c'est une vue...

    pourrais tu faire de même sur la table Raw_Histo dans ce cas ?

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Vous pouvez aussi essayer 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    DECLARE @Histo TABLE
    (
        Lib VARCHAR(20),
        Val SMALLINT   ,
        Dte DATETIME
    )
     
    INSERT INTO @Histo (Lib, Val, Dte) 
    select 'Balise_106_3_A_Alpha', 897, {ts '2011-01-05 12:31:29.241'} union all
    select 'Balise_106_3_A_Alpha',  25, {ts '2011-01-05 12:31:32.241'} union all
    select 'Balise_106_3_A_Alpha', 400, {ts '2011-01-05 12:31:35.241'} union all
    select 'Balise_106_3_B_Alpha', 897, {ts '2011-01-05 12:31:29.241'} union all
    select 'Balise_106_3_B_Alpha',  24, {ts '2011-01-05 12:31:32.241'} union all
    select 'Balise_106_3_B_Alpha', 400, {ts '2011-01-05 12:31:35.241'}
     
    ;With Histo (Lib, Val, Dte, rn) as
    (
    select Lib, val, Dte,
           row_number() over(PARTITION BY Lib order by Dte asc)
      from @Histo
    )
      select T1.Lib, T1.val, T1.Dte,
             sum(case T2.rn when 1 then 0 else T2.val end) as Cumul
        from Histo as T1
             inner join Histo as T2
               on T2.Lib  = T1.Lib
              and T2.Dte <= T1.Dte
    group by T1.Lib, T1.val, T1.Dte
    order by T1.Lib asc, T1.Dte asc
     
    Lib                  val    Dte                     Cumul
    -------------------- ------ ----------------------- -----------
    Balise_106_3_A_Alpha 897    2011-01-05 12:31:29.240 0
    Balise_106_3_A_Alpha 25     2011-01-05 12:31:32.240 25
    Balise_106_3_A_Alpha 400    2011-01-05 12:31:35.240 425
    Balise_106_3_B_Alpha 897    2011-01-05 12:31:29.240 0
    Balise_106_3_B_Alpha 24     2011-01-05 12:31:32.240 24
    Balise_106_3_B_Alpha 400    2011-01-05 12:31:35.240 424

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17
    Par défaut
    Pour la table j'obtient ceci:
    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
    USE [PanoIT]
    GO
     
    /****** Object:  Table [Private].[Raw_Histo]    Script Date: 01/20/2011 09:07:41 ******/
    SET ANSI_NULLS ON
    GO
     
    SET QUOTED_IDENTIFIER ON
    GO
     
    CREATE TABLE [Private].[Raw_Histo](
    	[DateHistoUTC] [datetime2](7) NOT NULL,
    	[Id] [bigint] IDENTITY(1,1) NOT NULL,
    	[DateHisto] [datetime2](7) NOT NULL,
    	[RefData] [bigint] NOT NULL,
    	[Value] [float] NULL,
     CONSTRAINT [PK_Raw_Histo] PRIMARY KEY CLUSTERED 
    (
    	[DateHistoUTC] ASC,
    	[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
     
    ALTER TABLE [Private].[Raw_Histo]  WITH CHECK ADD  CONSTRAINT [FK_Raw_Histo_Raw_Desc_Data] FOREIGN KEY([RefData])
    REFERENCES [Private].[Raw_Desc_Data] ([Id])
    GO
     
    ALTER TABLE [Private].[Raw_Histo] CHECK CONSTRAINT [FK_Raw_Histo_Raw_Desc_Data]
    GO

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17
    Par défaut
    Bon j'ai modifié la requête en utilisant mes nom de champ:
    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
     
    ;WITH CTE (EQ_NAME, Value, DateHisto, Somme) AS (
    	SELECT EQ_NAME, Value, DateHisto, 0
    	FROM(
    		SELECT EQ_NAME, Value,DateHisto, MIN(DateHisto) OVER(PARTITION BY EQ_NAME) AS MinDte
    		FROM Histo_Flat
    	)Tmp
    	WHERE DateHisto = MinDte	
    	UNION ALL
    	SELECT EQ_NAME, Value, DateHisto, Somme
    	FROM(
    		SELECT H.EQ_NAME, H.Value,H.DateHisto, MIN(H.DateHisto) OVER(PARTITION BY H.EQ_NAME) AS MinDte, CTE.Somme + H.Value AS Somme
    		FROM Histo_Flat H
    		INNER JOIN CTE ON CTE.EQ_NAME = H.EQ_NAME
    		WHERE H.DateHisto > CTE.DateHisto
    	)Tmp
    	WHERE DateHisto = MinDte	
     
    )
    SELECT EQ_NAME, Value, DateHisto, Somme
    FROM CTE
    ORDER BY EQ_NAME, DateHisto
    Mais j'obtiens le message d'erreur :
    Msg*240, Niveau*16, État*1, Ligne*1
    Les types ne correspondent pas entre la partie d'ancrage et la partie récursive dans la colonne "Somme" de la requête récursive "CTE".

  11. #11
    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
    visiblement, ta colonne value est de type float, il faut donc caster dans l'ancrage de la CTE :
    Code sql : 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
     
    ;WITH CTE (EQ_NAME, Value, DateHisto, Somme) AS (
    	SELECT EQ_NAME, Value, DateHisto, CAST(0 AS FLOAT)
    	FROM(
    		SELECT EQ_NAME, Value,DateHisto, MIN(DateHisto) OVER(PARTITION BY EQ_NAME) AS MinDte
    		FROM Histo_Flat
    	)Tmp
    	WHERE DateHisto = MinDte	
    	UNION ALL
    	SELECT EQ_NAME, Value, DateHisto, Somme
    	FROM(
    		SELECT H.EQ_NAME, H.Value,H.DateHisto, MIN(H.DateHisto) OVER(PARTITION BY H.EQ_NAME) AS MinDte, CTE.Somme + H.Value AS Somme
    		FROM Histo_Flat H
    		INNER JOIN CTE ON CTE.EQ_NAME = H.EQ_NAME
    		WHERE H.DateHisto > CTE.DateHisto
    	)Tmp
    	WHERE DateHisto = MinDte	
     
    )
    SELECT EQ_NAME, Value, DateHisto, Somme
    FROM CTE
    ORDER BY EQ_NAME, DateHisto

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17
    Par défaut
    Bon après test de cette requête :
    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
    ;WITH CTE (EQ_NAME, Value, DateHisto, Somme) AS (
    	SELECT EQ_NAME, Value, DateHisto, CAST(0 AS FLOAT)
    	FROM(
    		SELECT EQ_NAME, Value,DateHisto, MIN(DateHisto) OVER(PARTITION BY EQ_NAME) AS MinDte
    		FROM Histo_Flat
    	)Tmp
    	WHERE DateHisto = MinDte	
    	UNION ALL
    	SELECT EQ_NAME, Value, DateHisto, Somme
    	FROM(
    		SELECT H.EQ_NAME, H.Value,H.DateHisto, MIN(H.DateHisto) OVER(PARTITION BY H.EQ_NAME) AS MinDte, CTE.Somme + H.Value AS Somme
    		FROM Histo_Flat H
    		INNER JOIN CTE ON CTE.EQ_NAME = H.EQ_NAME
    		WHERE H.DateHisto > CTE.DateHisto
    	)Tmp
    	WHERE DateHisto = MinDte	
     
    )
    SELECT EQ_NAME, Value, DateHisto, Somme
    FROM CTE
    ORDER BY EQ_NAME, DateHisto
    J'obtient le code d'erreur suivant après plusieurs minute de moulinage :
    Msg*530, Niveau*16, État*1, Ligne*2
    L'instruction a été terminée. La récursivité maximale 100 a été épuisée avant la fin de l'instruction.

  13. #13
    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
    par défaut le nombre de récursions est limité à 100


    Ajoute cette ligne à la fin de ta requete pour spécifier un nombre illimité de récursions :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    OPTION MAXRECURSION 0

  14. #14
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    Votre cumul peut se faire par simple autojointure si je ne m'abuse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT 
    	A.EQ_Name, 
    	A.DateHisto, 
    	A.Value, 
    	SUM(COALESCE(B.Value, 0)) as Cumuls
    FROM Histo_Flat A
    	LEFT JOIN Histo_Flat B
    		ON A.EQ_Name = B.EQ_Name 
    		AND A.DateHisto > B.DateHisto
    GROUP BY 
    	A.EQ_Name, 
    	A.DateHisto, 
    	A.Value

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17
    Par défaut
    Merci a tous pour vos réponses.
    vmolines ta solution fonctionne,par contre mes balises me font une mesure toutes les 3 secondes donc c'est très lent.
    je vais essayer de faire un cumul toutes les heures.

  16. #16
    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
    En effet vmonlines !

    Sauf que comme il ne veut pas prendre en compte la "première valeur", le code serait plutot celui-ci :

    Code sql : 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
     
    SELECT 
    	A.EQ_Name, 
    	A.DateHisto, 
    	A.Value, 
    	SUM(COALESCE(B.Value, 0)) - Premier.PremiereValeur AS Cumuls 
    FROM Histo_Flat  A
    	LEFT JOIN Histo_Flat B
    		ON A.EQ_Name = B.EQ_Name 
    		AND A.DateHisto >= B.DateHisto
    	LEFT JOIN (
    		SELECT EQ_NAME, Value
    		FROM(
    			SELECT 
    				EQ_NAME, 
    				Value,
    				DateHisto, 
    				MIN(DateHisto) OVER(PARTITION BY EQ_NAME) AS MinDte
    			FROM Histo_Flat 
    		)Tmp
    		WHERE DateHisto = MinDte
    	) AS Premier(EQ_Name, PremiereValeur) ON Premier.EQ_Name = A.EQ_Name
    GROUP BY 
    	A.EQ_Name, 
    	A.DateHisto, 
    	A.Value,
    	Premier.PremiereValeur
    ORDER BY A.EQ_NAME, A.DateHisto

  17. #17
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Jetez un œil ma solution qui a été oubliée je pense, non pas que je cherche à me faire mousser, mais je pense que côté performance elle doit tenir la route.

  18. #18
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    C'est possible et pas de mal à rappeler une solution oubliée.

    Côté performance de ma requête, elle mériterait :

    - de travailler avec une clé qui ne soit pas du texte (EQ_NAME)
    - de bénéficier d'un index couvrant la date
    - de s'affranchir de la vue initiale qui doit bien alourdir le tout. Je n'ai pas pris le temps de l'analyser.

  19. #19
    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
    Citation Envoyé par Waldar Voir le message
    Jetez un œil ma solution qui a été oubliée je pense, non pas que je cherche à me faire mousser, mais je pense que côté performance elle doit tenir la route.
    En effet !

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17
    Par défaut
    En fait a part la première solution de vmolines les autres solutions ne m'affiche toujours rien au bout de 5 minutes...
    Par contre j'ai 27 EQ_NAME différend,si je met une condition Where avec le nom de la balise le resultat est faux...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT 
    	A.EQ_Name, 
    	A.DateHisto, 
    	A.Value, 
    	SUM(COALESCE(B.Value, 0)) AS Cumuls
    FROM Histo_Flat A
    	LEFT JOIN Histo_Flat B
    		ON A.EQ_Name = B.EQ_Name 
    		AND A.DateHisto > B.DateHisto
    where a.eq_name='Balise_106_3_A_Alpha'
    GROUP BY 
    	A.EQ_Name, 
    	A.DateHisto, 
    	A.Value
    Resultat:
    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
     
    EQ_Name	                DateHisto                    Value     Cumuls
    Balise_106_3_A_Alpha	2011-01-05 12:31:37.2510000	-3	15576
    Balise_106_3_A_Alpha	2011-01-05 12:31:48.2510000	-3	32043
    Balise_106_3_A_Alpha	2011-01-05 12:31:59.2510000	-3	48510
    Balise_106_3_A_Alpha	2011-01-05 12:32:10.2670000	-3	64977
    Balise_106_3_A_Alpha	2011-01-05 12:32:21.2680000	-3	81444
    Balise_106_3_A_Alpha	2011-01-05 12:32:32.2680000	-3	97911
    Balise_106_3_A_Alpha	2011-01-05 12:32:43.2680000	-3	114378
    Balise_106_3_A_Alpha	2011-01-05 12:32:54.2700000	-3	130845
    Balise_106_3_A_Alpha	2011-01-05 12:33:05.2730000	-3	147312
    Balise_106_3_A_Alpha	2011-01-05 12:33:16.2730000	-3	163779
    Balise_106_3_A_Alpha	2011-01-05 12:33:27.2750000	-3	180246
    Balise_106_3_A_Alpha	2011-01-05 12:33:38.2740000	-3	196713
    Balise_106_3_A_Alpha	2011-01-05 12:33:49.2750000	-3	213180
    Balise_106_3_A_Alpha	2011-01-05 12:34:00.2750000	-3	229647
    Balise_106_3_A_Alpha	2011-01-05 12:34:11.2830000	-3	246114

Discussions similaires

  1. sql server ou open source pour le décisionnel
    Par lamyae_84 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 18/03/2007, 10h55
  2. Réponses: 4
    Dernier message: 22/05/2006, 10h25
  3. [SQL Server] ALTER TABLE : Valeurs NULL et par défaut
    Par LeNovice dans le forum Langage SQL
    Réponses: 3
    Dernier message: 09/05/2006, 21h38
  4. [sql server 7.0] valeurs de colonnes(débutante)
    Par kouta20 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 20/12/2005, 18h27
  5. Réponses: 3
    Dernier message: 10/08/2005, 11h11

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