sql 服务器中的最小函数无法正常工作,给出 0
Min function in sql server is not working properly giving 0
我想用今天的最小值减去今天的最大值。我正确地得到最大值,但最小值变为 0。如何从 kvarh 的最大值中减去今天的最小值。
数据类型 kvarh - float,devicetimestamp - datetime
代码
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, 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';
MIN
函数不会 return 0
使用此示例数据 - 如果未找到任何行,您将得到 NULL
作为结果。只有只有一行符合你的条件时你才会得到0
,因为你会减去相同的值
例如:
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';
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 < GETDATE()
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。如何从 kvarh 的最大值中减去今天的最小值。
数据类型 kvarh - float,devicetimestamp - datetime
代码
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, 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';
MIN
函数不会 return 0
使用此示例数据 - 如果未找到任何行,您将得到 NULL
作为结果。只有只有一行符合你的条件时你才会得到0
,因为你会减去相同的值
例如:
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';
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 < GETDATE()
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