问题描述
我想从今天的最小值减去今天的最大值。我可以正确地获得最大值,但最小值却变为0。如何从kvarh的最大值中减去今天的最小值。
数据类型kvarh-浮点数,devicetimestamp-日期时间
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
样本数据
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
解决方法
我已经检查了您的查询,并且工作正常。您可以像这样减少一点:
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,'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';
MIN
函数不会将此示例数据返回0
-如果未找到任何行,您将得到NULL
的结果。仅当只有一行符合您的条件时,您才会获得0
,因为您将减去相同的值。
例如:
DECLARE @DataSource TABLE
(
[A_id] INT,424107.1)
--,424099.8);
SELECT MAX(kvarh) - MIN(kvarh) AS Difference
FROM @DataSource
WHERE DeviceTimeStamp < GETDATE()
and DEVICEIMEI = '868996';
,
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
,
QuYour min子查询可能具有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