none
la différence entre le début et la fin de la journée RRS feed

  • Question

  • Bonjour j'ai une table ou je dois faire la somme de chaque température pour un utilisateur et aussi je dois faire la différence entre la dates ("exemple de minuit a minuit -1 de chaque jours ) car la table est en temps réel et a chaque 20 seconde il y aura des données j'ai essayé cette requête

     
      SELECT     SUM (c.value) ,u.UserID,b.BuildingID,f.FloorID,r.RoomID,ep.EquipmentID
    ,e.Name,p.ProprietesName
     
    FROM            
       dbo.Consumptions c,
     dbo.PropertiesInstances p,
    dbo.Buildings b,
    dbo.Users u,
    dbo.EquipmentProperties ep,
    dbo.Equipments e,
    dbo.Floors f,
    dbo.Rooms r
    WHERE 
    u.UserID=b.UserId
    AND
    b.BuildingID=f.BuildingID
    AND
    f.FloorID=r.FloorID
    AND
    r.RoomID=e.RoomID
    AND
    e.EquipmentID=ep.EquipmentID
    AND
    ep.EquipmentPropertiesID=p.EquipmentPropertiesID
    AND
    p.PropertiesInstanceID=c.PropertiesInstanceID
    AND
    ( p.ProprietesName=3) AND (e.ZwaveType=2) 
    GROUP BY 
    u.UserID,b.BuildingID,f.FloorID,r.RoomID,ep.EquipmentID,convert(nvarchar,c.date,103)
    ,e.Name,p.ProprietesNam

    vendredi 23 mai 2014 07:56

Réponses

  • Bonjour

    Votre question n'est pas de tout claire.
    Le plus probable vous devez utiliser DateDiff mais où et comment l'appliquer n'est pas clair pour moi.
    Si vous venez avec des détails on pourra vous aider.

    Bien cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    • Marqué comme réponse haythem.MA vendredi 23 mai 2014 10:45
    vendredi 23 mai 2014 10:32
    Modérateur
  • Si j'ai bien compris, vous devez ajouter  une condition pour calculer seulement pour getdate() - 1.

    Donc je dirais d'utilizer 

    WHERE

    ................

    AND  convert (varchar(MAX) , dateadd(d, -1, getdate() ) , 103 ) =  convert (varchar(MAX) , c.date , 103)

    Bien cordialement, 


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    • Marqué comme réponse haythem.MA lundi 26 mai 2014 09:20
    lundi 26 mai 2014 08:54
    Modérateur
  • Bonjour

    Désolé, je ne comprends pas le problème.

    Vous devez ne sélectionner que les données de la journée précédente ?

    Alors:

    DECLARE @d DATE
    SET @d = GetDate()
    -- La cast implicite va supprimer la partie heure


    WHERE ColonneDate >= DateAdd(day,-1,@d)
    AND ColonneDate < @d

    Quelle que soit l'heure de votre datetime dans la table, vous ne retournerez que les enregistrements de la journée précédente.

    Christophe


    Christophe LAPORTE - Independent Consultant & Trainer - SQL Server MVP-MCM

    • Marqué comme réponse haythem.MA vendredi 30 mai 2014 14:28
    vendredi 30 mai 2014 13:06
  • Un simple

      select sum([energie]),Convert(date,[Date])
      from  [Table]
      group by Convert(date,[Date])

    Vous donne la somme sur la col energie, jour par jour. Pourquoi faire un datediff ou plus compliqué ?

    Si ensuite vous avez besoin de filtrer pour ne ramener qu'une seule journée alors passez par exemple par une CTE :

    With CTE_EnergieByDay AS
    (
      select sum([energie]),Convert(date,[Date]) as [Date]
      from  [Table]
      group by Convert(date,[Date])
    )
    SELECT *
    FROM CTE_EnergieByDay
    WHERE [Date] = DateAdd(day,-1,Convert(Date,GetDate()))

    Vous obtenez ainsi la valeur pour la veille.

    Si vous avez besoin de davantage de colonnes, agrégées en MIN, MAX, AVG, ajoutez les simplement dans la CTE.

    Christophe


    Christophe LAPORTE - Independent Consultant & Trainer - SQL Server MVP-MCM

    • Marqué comme réponse haythem.MA vendredi 30 mai 2014 15:51
    vendredi 30 mai 2014 14:44
  • Voilà le problème exprimé plus clairement.

    With MyCTE AS
    (
     SELECT
      FIRST_VALUE([energie]) OVER (PARTITION BY Convert(Date,GetDate()) ORDER BY [Date] DESC ) -- Val Fin journée
                    - 
      FIRST_VALUE([energie]) OVER (PARTITION BY Convert(Date,GetDate()) ORDER BY [Date] ) -- Val début journée
      AS EnergieConsommee,
      Convert(Date,GetDate()) as Jour
     FROM [Table]
    )
    SELECT Jour,EnergieConsommee
    FROM MyCTE 

    Si besoin un distinct sur le select en fin de requete.


    Christophe LAPORTE - Independent Consultant & Trainer - SQL Server MVP-MCM


    vendredi 30 mai 2014 15:51
  • Vous être trop pressés d'arriver au résultat.

    Faites les choses pas à pas, quitte à empiler les CTE.

    Une possibilité :

    With MyCTE AS
    (
    	SELECT
    		FIRST_VALUE([energie]) OVER (PARTITION BY Convert(Date,GetDate()) ORDER BY [Date] DESC ) -- Val Fin journée
                    - 
    		FIRST_VALUE([energie]) OVER (PARTITION BY Convert(Date,GetDate()) ORDER BY [Date] ) -- Val début journée
    		AS EnergieConsommee,
    		Convert(Date,GetDate()) as Jour, *
    	FROM [Table]
    )
    SELECT Jour,EnergieConsommee, u.UserID, b.BuildingID,f.Name AS NameFloors,
                r.Name AS Rooms,   e.EquipmentID,
    FROM MyCTE c,
    	dbo.PropertiesInstances p,
    	dbo.Buildings b,
    	dbo.Users u,
    	dbo.EquipmentProperties ep,
    	dbo.Equipments e,
    	dbo.Floors f,
    	dbo.Rooms r
    WHERE u.UserID=b.UserId
    AND b.BuildingID=f.BuildingID
    AND f.FloorID=r.FloorID
    AND r.RoomID=e.RoomID
    AND e.EquipmentID=ep.EquipmentID
    AND ep.EquipmentPropertiesID=p.EquipmentPropertiesID
    AND p.PropertiesInstanceID=c.PropertiesInstanceID
    AND p.ProprietesName =2 AND e.ZwaveType=1

    Notez que je n'ai pas de group by puisque ma CTE me fournit pour chaque ligne de la table de base la valeur consommée dans la journée. Ce n'est qu'une fois que vous avez votre valeur pour al journée que vous devez faire els jointure pour afficher le détail des tables jointes.

    Christophe LAPORTE - Independent Consultant & Trainer - SQL Server MVP-MCM

    • Marqué comme réponse haythem.MA dimanche 1 juin 2014 00:10
    vendredi 30 mai 2014 16:32

Toutes les réponses

  • Bonjour

    Votre question n'est pas de tout claire.
    Le plus probable vous devez utiliser DateDiff mais où et comment l'appliquer n'est pas clair pour moi.
    Si vous venez avec des détails on pourra vous aider.

    Bien cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    • Marqué comme réponse haythem.MA vendredi 23 mai 2014 10:45
    vendredi 23 mai 2014 10:32
    Modérateur
  • Bon je suis en train de faire la moyenne de température par jours , j'ai réussi a faire la moyenne mais le problème maintenant   c'est de calculer en jours -1 avec la fonction getDate()-1
    vendredi 23 mai 2014 11:04
  • Dans ce cas je dirais de utilizer avg() en place de sum().

    Bien cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.


    vendredi 23 mai 2014 11:19
    Modérateur
  • oui déja j'ai changé AVG() a la place de sum mais j'trouvé difficulté au niveau getDate()-1
    vendredi 23 mai 2014 13:51
  • En effet vous voulez calculer la moyenne par jour? Dans ce cas vous devez seulement grouper comme vous la faites déjà.

    Pour calculer getdate()-1 vous pouvez utilizer dateadd(d, -1, getdate() )

    Bien cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    vendredi 23 mai 2014 18:54
    Modérateur
  • j'ai essayé et ça ne marche pas voila  erreur"

    Msg 164, Level 15, State 1, Line 42
    Each GROUP BY expression must contain at least one column that is not an outer reference

    "

    go
    SELECT      AVG(c.value)  ,u.UserID,b.BuildingID,f.Name as NameFloors,r.Name as Rooms 
    ,e.Name,d.DeviceID,e.EquipmentID,e.Name
    
    FROM            
       dbo.Consumptions c,
     dbo.PropertiesInstances p,
    dbo.Buildings b,
    dbo.Users u,
    dbo.EquipmentProperties ep,
    dbo.Equipments e,
    dbo.Floors f,
    dbo.Rooms r,
    EquipmentDevices ed ,
    UserDevices ud ,
    Devices d
    
    where 
    u.UserID=b.UserId
    And
    b.BuildingID=f.BuildingID
    And
    f.FloorID=r.FloorID
    and
    r.RoomID=e.RoomID
    and
    e.EquipmentID=ep.EquipmentID
    and
    ep.EquipmentPropertiesID=p.EquipmentPropertiesID
    and
    p.PropertiesInstanceID=c.PropertiesInstanceID
    and
    e.EquipmentID=ed.EquipmentID
    and 
    ud.UserDeviceID=ed.UserDeviceID
    and
    ud.DeviceID=d.DeviceID
    and
    (p.ProprietesName=2 ) and (e.ZwaveType=0 or e.ZwaveType=1) and (c.Unit=2 or c.Unit=3)
    GROUP BY 
    u.UserID,b.BuildingID,f.Name ,r.Name  
    ,e.Name,d.DeviceID,e.EquipmentID,e.Name,
    dateadd(d, -120, getdate() )

    vendredi 23 mai 2014 23:28
  • Bonjour

    Je dirais qu'il n'aime pas faire le groupage sur une constante = dateadd(d, -120, getdate() ).
    Essayez de nous expliquer le résultat que vous cherchez, et sera plus facile de vous mettre sur le bon chemin.

    Bien cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    lundi 26 mai 2014 07:41
    Modérateur
  • j'ai une table qui contient la valeur de consommation de chaque user(c'est une table qui contient ensemble des jointure user ,building,équipement...) avec une date mais le problème est dans la date car dans chaque 30 seconde il y a une valeur donc je dois calculer la différence entre le début et la fin de la journée a jours -1
    lundi 26 mai 2014 08:14
  • Si vous calculez la difference = Datediff (ss, max(c.date), min(c.date) ) et grouper par convert(nvarchar,c.date,103), cela vous convient?

    Bien cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    lundi 26 mai 2014 08:21
    Modérateur
  • merci mais il reste le problème de jours -1
    lundi 26 mai 2014 08:39
  • Si j'ai bien compris, vous devez ajouter  une condition pour calculer seulement pour getdate() - 1.

    Donc je dirais d'utilizer 

    WHERE

    ................

    AND  convert (varchar(MAX) , dateadd(d, -1, getdate() ) , 103 ) =  convert (varchar(MAX) , c.date , 103)

    Bien cordialement, 


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    • Marqué comme réponse haythem.MA lundi 26 mai 2014 09:20
    lundi 26 mai 2014 08:54
    Modérateur
  • Merci beaucoup 
    lundi 26 mai 2014 09:20
  • bon voila la requête finale mais il y un petit problème comment afficher la date converti  

    SELECT      u.UserID,
                b.BuildingID,
                f.Name AS NameFloors,
                r.Name AS Rooms,
                d.DeviceID,
                e.EquipmentID,
              AVG(c.value) as consomation
    	
    			
    FROM        dbo.Users u
    LEFT JOIN   dbo.Buildings b On u.UserID=b.UserId
    LEFT JOIN   dbo.Floors f On b.BuildingID=f.BuildingID
    LEFT JOIN   dbo.Rooms r On f.FloorID=r.FloorID         
    LEFT JOIN   dbo.Equipments e On r.RoomID=e.RoomID
    LEFT JOIN   dbo.EquipmentProperties ep On e.EquipmentID = ep.EquipmentID
    LEFT JOIN   dbo.PropertiesInstances p On ep.EquipmentPropertiesID = p.EquipmentPropertiesID
    LEFT JOIN   dbo.Consumptions c On p.PropertiesInstanceID=c.PropertiesInstanceID
    left JOIN        dbo.EquipmentDevices ed On e.EquipmentID = ed.EquipmentID
    left JOIN        dbo.UserDevices ud On ud.UserDeviceID = ed.UserDeviceID
    left JOIN        dbo.Devices d On ud.DeviceID = d.DeviceID
    WHERE       p.ProprietesName =2
    AND         (e.ZwaveType=0 or e.ZwaveType=1)
    AND c.Unit=2
    AND  convert (varchar(MAX) , dateadd(d, -180, getdate() ) , 103 )=convert (varchar(MAX) , c.date , 103) 
    GROUP BY    u.UserID,
                b.BuildingID,
                f.Name,
                r.Name,  
         
                d.DeviceID,
                e.EquipmentID
    	


    lundi 26 mai 2014 16:20
  • Bonjour

    Essayez tout simplement de faire un AVG(colonneTempéreature) OVER (Parition By ColonneDate ORDER BY ColonneDate)

    Si votre col est une Date / heure alors un petit cas avant pour n'avoir que la date. Vous aurez ainsi une moyenne, jour par jour de vos T°.

    Ensuite, reste plus qu'a filtrer el tout pour avoir la j=journée que vous souhaitez, quitte a passer par un row_number() OVER () avec une clause order by appropriée.

    Christophe


    Christophe LAPORTE - Independent Consultant & Trainer - SQL Server MVP-MCM

    jeudi 29 mai 2014 13:01
  • Mon problème c'est de  faire la différence entre 00.00.00 -23.59.59  j'ai utilisé la fonction

    datediff DATEDIFF(DAY,(GETDATE(),-180), SELECT (max(c.date)- min(c.date)) )

    vendredi 30 mai 2014 09:26
  • Bonjour

    Désolé, je ne comprends pas le problème.

    Vous devez ne sélectionner que les données de la journée précédente ?

    Alors:

    DECLARE @d DATE
    SET @d = GetDate()
    -- La cast implicite va supprimer la partie heure


    WHERE ColonneDate >= DateAdd(day,-1,@d)
    AND ColonneDate < @d

    Quelle que soit l'heure de votre datetime dans la table, vous ne retournerez que les enregistrements de la journée précédente.

    Christophe


    Christophe LAPORTE - Independent Consultant & Trainer - SQL Server MVP-MCM

    • Marqué comme réponse haythem.MA vendredi 30 mai 2014 14:28
    vendredi 30 mai 2014 13:06
  • bon voila mon 1ére problème  

    http://imageshack.com/a/img834/1042/nx2f.png

    donc a partir de ce problème je doit calculer la date de la fin - la date de début pour trouver la valeur d’énergie par jou

    vendredi 30 mai 2014 14:08
  • Un simple

      select sum([energie]),Convert(date,[Date])
      from  [Table]
      group by Convert(date,[Date])

    Vous donne la somme sur la col energie, jour par jour. Pourquoi faire un datediff ou plus compliqué ?

    Si ensuite vous avez besoin de filtrer pour ne ramener qu'une seule journée alors passez par exemple par une CTE :

    With CTE_EnergieByDay AS
    (
      select sum([energie]),Convert(date,[Date]) as [Date]
      from  [Table]
      group by Convert(date,[Date])
    )
    SELECT *
    FROM CTE_EnergieByDay
    WHERE [Date] = DateAdd(day,-1,Convert(Date,GetDate()))

    Vous obtenez ainsi la valeur pour la veille.

    Si vous avez besoin de davantage de colonnes, agrégées en MIN, MAX, AVG, ajoutez les simplement dans la CTE.

    Christophe


    Christophe LAPORTE - Independent Consultant & Trainer - SQL Server MVP-MCM

    • Marqué comme réponse haythem.MA vendredi 30 mai 2014 15:51
    vendredi 30 mai 2014 14:44
  • merci pour votre aide mais le problème c'est pas la fonction SUM pour calculer Energie je dois faire la différence ente le premier et derniers valeur 
    vendredi 30 mai 2014 15:11
  • Voilà le problème exprimé plus clairement.

    With MyCTE AS
    (
     SELECT
      FIRST_VALUE([energie]) OVER (PARTITION BY Convert(Date,GetDate()) ORDER BY [Date] DESC ) -- Val Fin journée
                    - 
      FIRST_VALUE([energie]) OVER (PARTITION BY Convert(Date,GetDate()) ORDER BY [Date] ) -- Val début journée
      AS EnergieConsommee,
      Convert(Date,GetDate()) as Jour
     FROM [Table]
    )
    SELECT Jour,EnergieConsommee
    FROM MyCTE 

    Si besoin un distinct sur le select en fin de requete.


    Christophe LAPORTE - Independent Consultant & Trainer - SQL Server MVP-MCM


    vendredi 30 mai 2014 15:51
  • Merci pour votre solution mais il y a une erreur "Msg 8120, Level 16, State 1, Line 5
    Column 'dbo.Consumptions.Date' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause."

     requête

    With CTE_EnergieByDay AS 
    (
    select u.UserID, b.BuildingID,f.Name AS NameFloors,
                r.Name AS Rooms,   e.EquipmentID,
      FIRST_VALUE(c.value) OVER (PARTITION BY Convert(Date,GetDate()-182) ORDER BY [Date] DESC ) -- Val Fin journée
                    - 
      FIRST_VALUE(c.value) OVER (PARTITION BY Convert(Date,GetDate() -182) ORDER BY [Date] ) -- Val début journée
      AS EnergieConsommee,Convert(date,[Date]) as [Date]
    FROM  
       dbo.Consumptions c,
     dbo.PropertiesInstances p,
    dbo.Buildings b,
    dbo.Users u,
    dbo.EquipmentProperties ep,
    dbo.Equipments e,
    dbo.Floors f,
    dbo.Rooms r
    WHERE 
    u.UserID=b.UserId
    AND
    b.BuildingID=f.BuildingID
    AND
    f.FloorID=r.FloorID
    AND
    r.RoomID=e.RoomID
    AND
    e.EquipmentID=ep.EquipmentID
    AND
    ep.EquipmentPropertiesID=p.EquipmentPropertiesID
    AND
    p.PropertiesInstanceID=c.PropertiesInstanceID
    AND      p.ProprietesName =2 AND e.ZwaveType=1
      group by 
      u.UserID,
                b.BuildingID,
                f.Name,
                r.Name,  
               e.EquipmentID,
    			Convert(date,[Date])
    )
    SELECT *
    FROM CTE_EnergieByDay 
    --WHERE [Date] = DateAdd(day,-182,Convert(Date,GetDate()))
    NB getdate()-182 c'est a dire jours -182 
     

    vendredi 30 mai 2014 16:23
  • Vous être trop pressés d'arriver au résultat.

    Faites les choses pas à pas, quitte à empiler les CTE.

    Une possibilité :

    With MyCTE AS
    (
    	SELECT
    		FIRST_VALUE([energie]) OVER (PARTITION BY Convert(Date,GetDate()) ORDER BY [Date] DESC ) -- Val Fin journée
                    - 
    		FIRST_VALUE([energie]) OVER (PARTITION BY Convert(Date,GetDate()) ORDER BY [Date] ) -- Val début journée
    		AS EnergieConsommee,
    		Convert(Date,GetDate()) as Jour, *
    	FROM [Table]
    )
    SELECT Jour,EnergieConsommee, u.UserID, b.BuildingID,f.Name AS NameFloors,
                r.Name AS Rooms,   e.EquipmentID,
    FROM MyCTE c,
    	dbo.PropertiesInstances p,
    	dbo.Buildings b,
    	dbo.Users u,
    	dbo.EquipmentProperties ep,
    	dbo.Equipments e,
    	dbo.Floors f,
    	dbo.Rooms r
    WHERE u.UserID=b.UserId
    AND b.BuildingID=f.BuildingID
    AND f.FloorID=r.FloorID
    AND r.RoomID=e.RoomID
    AND e.EquipmentID=ep.EquipmentID
    AND ep.EquipmentPropertiesID=p.EquipmentPropertiesID
    AND p.PropertiesInstanceID=c.PropertiesInstanceID
    AND p.ProprietesName =2 AND e.ZwaveType=1

    Notez que je n'ai pas de group by puisque ma CTE me fournit pour chaque ligne de la table de base la valeur consommée dans la journée. Ce n'est qu'une fois que vous avez votre valeur pour al journée que vous devez faire els jointure pour afficher le détail des tables jointes.

    Christophe LAPORTE - Independent Consultant & Trainer - SQL Server MVP-MCM

    • Marqué comme réponse haythem.MA dimanche 1 juin 2014 00:10
    vendredi 30 mai 2014 16:32
  • bonjour je vient de calculer la consommations par jours mais si je veux la calculer par semaine je doit changer la fonction dateADD a week mais j'ai un doute pour le 2 éme paramétré

    DateAdd(WEEK,-15,Convert(Date,GetDate()))
    select u.UserID, b.BuildingID,f.Name AS NameFloors,
                r.Name AS Rooms,
                e.EquipmentID,
    
      (MAX(c.Value) - MIN(c.Value))*1000 as Energie,Convert(date,[Date]) as [Date], 
       d.DeviceID,
        convert(varchar(10),getdate(),103) as dateJours
     
     FROM        dbo.Users u
    LEFT JOIN   dbo.Buildings b ON u.UserID=b.UserId
    LEFT JOIN   dbo.Floors f ON b.BuildingID=f.BuildingID
    LEFT JOIN   dbo.Rooms r ON f.FloorID=r.FloorID         
    LEFT JOIN   dbo.Equipments e ON r.RoomID=e.RoomID
    LEFT JOIN   dbo.EquipmentProperties ep ON e.EquipmentID = ep.EquipmentID
    LEFT JOIN   dbo.PropertiesInstances p ON ep.EquipmentPropertiesID = p.EquipmentPropertiesID
    LEFT JOIN   dbo.Consumptions c ON p.PropertiesInstanceID=c.PropertiesInstanceID
    LEFT JOIN        dbo.EquipmentDevices ed ON e.EquipmentID = ed.EquipmentID
    LEFT JOIN        dbo.UserDevices ud ON ud.UserDeviceID = ed.UserDeviceID
    LEFT JOIN        dbo.Devices d ON ud.DeviceID = d.DeviceID
    where      p.ProprietesName =2  and c.Unit=2 and Convert(date,[Date]) = DateAdd(WEEK,-15,Convert(Date,GetDate()))
    
      group by 
      u.UserID,
                b.BuildingID,
                f.Name,
                r.Name, 
               e.EquipmentID,
       Convert(date,[Date]),e.Name,d.DeviceID



    lundi 9 juin 2014 11:45