Je veux soustraire la valeur maximale d'aujourd'hui de la valeur minimale d'aujourd'hui. im obtenir la valeur max correctement mais la valeur min devient 0. comment soustraire la valeur min d'aujourd'hui de la valeur max de kvarh.

Type de données kvarh - float, devicetimestamp - datetime

Code

   select(
  SELECT MAX(kvarh)
  FROM [Transformer].[dbo].[Total_Power]
 WHERe DeviceTimeStamp < GETDATE()
 and DEVICEIMEI = '868996')
 -
  (SELECT MIN(kvarh)
  FROM [Transformer].[dbo].[Total_Power]
 WHERe DeviceTimeStamp < GETDATE()
 and DEVICEIMEI = '868996')
  as Difference

Exemples de données

     A_id   DeviceImei  DeviceTimeStamp           KWH       KVARH       
    985302  868996     2020-10-16 10:30:30.000  36682.5     424107.1    
    985298  868996     2020-10-16 10:15:31.000  36678.94    424103.3    
    985296  8689960    2020-10-16 10:00:29.000  36675.88    424099.8    
0
krishna mohan 16 oct. 2020 à 08:04

3 réponses

Meilleure réponse

J'ai vérifié votre requête et cela fonctionne bien. Vous pouvez le réduire un peu comme ceci:

DECLARE @DataSource TABLE
(
    [A_id] INT  
   ,[DeviceImei]  INT
   ,[DeviceTimeStamp] DATETIME
   ,[KWH] DECIMAL(9,2)
   ,[KVARH] DECIMAL(9,2)
);

INSERT INTO @DataSource ([A_id], [DeviceImei], [DeviceTimeStamp], [KWH], [KVARH])
VALUES (985302, 868996, '2020-10-16 00:30:30.000', 36682.5, 424107.1)
      ,(985298, 868996, '2020-10-16 00:15:31.000', 36678.94, 424103.3)
      ,(985296, 8689960, '2020-10-16 00:00:29.000', 36675.88, 424099.8);


SELECT MAX(kvarh) - MIN(kvarh) AS Difference
FROM @DataSource
WHERE DeviceTimeStamp < GETDATE()
   and DEVICEIMEI = '868996';

La fonction MIN ne retournera pas 0 avec cet exemple de données - si aucune ligne n'est trouvée, vous obtiendrez NULL en conséquence. Vous n'obtiendrez 0 que s'il n'y a qu'une seule ligne correspondant à votre condition, car vous soustrayez la même valeur.

Par exemple:

DECLARE @DataSource TABLE
(
    [A_id] INT  
   ,[DeviceImei]  INT
   ,[DeviceTimeStamp] DATETIME
   ,[KWH] DECIMAL(9,2)
   ,[KVARH] DECIMAL(9,2)
);

INSERT INTO @DataSource ([A_id], [DeviceImei], [DeviceTimeStamp], [KWH], [KVARH])
VALUES (985302, 868996, '2020-10-16 00:30:30.000', 36682.5, 424107.1)
      --,(985298, 868996, '2020-10-16 00:15:31.000', 36678.94, 424103.3)
      ,(985296, 8689960, '2020-10-16 00:00:29.000', 36675.88, 424099.8);


SELECT MAX(kvarh) - MIN(kvarh) AS Difference
FROM @DataSource
WHERE DeviceTimeStamp < GETDATE()
   and DEVICEIMEI = '868996';
0
gotqn 16 oct. 2020 à 05:19
select(
select max(KVARH) from [Transformer].[dbo].[Total_Power] 
where cast(DeviceTimeStamp as Date)  = cast(getdate() as Date) and DEVICEIMEI = '868996'
)
-
(
select min(KVARH) from [Transformer].[dbo].[Total_Power] 
where cast(DeviceTimeStamp as Date)  = cast(getdate() as Date) and DEVICEIMEI = '868996'
)
as Todays_Consumption
0
krishna mohan 16 oct. 2020 à 05:34

QuYour min sous-requête pourrait avoir 0 >> WHERe DeviceTimeStamp

   select(
  SELECT MAX(kvarh)
  FROM [Transformer].[dbo].[Total_Power]
  WHERe DeviceTimeStamp < GETDATE()
  and DEVICEIMEI = '868996')
  -
   (SELECT MIN(kvarh)  /*could have 0 value*/
   FROM [Transformer].[dbo].[Total_Power]
   WHERe DeviceTimeStamp < GETDATE()
   and DEVICEIMEI = '868996'
   and kvarh >0)/*try adding this*/
   as Difference
0
Lenroy Yeung 21 oct. 2020 à 06:50