Sql server max(columnname)给出错误的输出
简单的select max函数给出错误的值。当我运行下面的查询时,我得到的最大值为100,其中列中的最大值为11。我还有一个问题,当我运行这个查询时,我得到了更令人担忧的结果——所有列值都出错了。我做错了什么 从报告中选择最大值(转换([PT_100SCALED_VAL0]为十进制值))Sql server max(columnname)给出错误的输出,sql-server,sql-server-2008,Sql Server,Sql Server 2008,简单的select max函数给出错误的值。当我运行下面的查询时,我得到的最大值为100,其中列中的最大值为11。我还有一个问题,当我运行这个查询时,我得到了更令人担忧的结果——所有列值都出错了。我做错了什么 从报告中选择最大值(转换([PT_100SCALED_VAL0]为十进制值)) SELECT t7.[timestamp], t7.[timestamp_utc], t7.[PT_100SCALED_VAL0], t7.[PT_101SCALED_VAL0], t7.[PT_102SCA
SELECT t7.[timestamp], t7.[timestamp_utc], t7.[PT_100SCALED_VAL0], t7.[PT_101SCALED_VAL0],
t7.[PT_102SCALED_VAL0], t7.[PT_103SCALED_VAL0], t7.[PT_104SCALED_VAL0], t7.[PT_105SCALED_VAL0],
t7.[PT_200SCALED_VAL0], t7.[PT_201SCALED_VAL0], t7.[PT_300SCALED_VAL0] ,
( SELECT MAX([PT_100SCALED_VAL0]) FROM REPORT ) AS
PT_100SCALED_VAL0_MAXIMUM FROM [REPORT] t7
Where t7. [PT_100SCALED_VAL0]=100
group by t7.[timestamp],t7.[timestamp_utc],t7.[PT_100SCALED_VAL0],t7.[PT_101SCALED_VAL0],t7.[PT_102SCALED_VAL0],t7.[PT_103SCALED_VAL0],t7.[PT_104SCALED_VAL0],t7.[PT_105SCALED_VAL0],t7.[PT_200SCALED_VAL0],t7.[PT_201SCALED_VAL0],t7.[PT_300SCALED_VAL0]
下面是我的表格设计查询
USE [master]
GO
/****** Object: Table [dbo].[REPORT] Script Date: 03/24/2016 16:24:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[REPORT](
[timestamp] [datetime] NULL,
[timestamp_utc] [datetime] NOT NULL,
[PT_100SCALED_VAL0] [float] NULL,
[PT_101SCALED_VAL0] [float] NULL,
[PT_102SCALED_VAL0] [float] NULL,
[PT_103SCALED_VAL0] [float] NULL,
[PT_104SCALED_VAL0] [float] NULL,
[PT_105SCALED_VAL0] [float] NULL,
[PT_200SCALED_VAL0] [float] NULL,
[PT_201SCALED_VAL0] [float] NULL,
[PT_300SCALED_VAL0] [float] NULL,
CONSTRAINT [PK_REPORT] PRIMARY KEY CLUSTERED
(
[timestamp_utc] 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
以下是我的表格数据:
timestamp timestamp_utc PT_100SCALED_VAL0 PT_101SCALED_VAL0 PT_102SCALED_VAL0 PT_103SCALED_VAL0 PT_104SCALED_VAL0 PT_105SCALED_VAL0 PT_200SCALED_VAL0 PT_201SCALED_VAL0 PT_300SCALED_VAL0
2016-01-08 16:02:50.780 2016-01-08 10:32:50.780 11 22 33 44 55 66 0 0 0
2016-01-08 16:04:42.333 2016-01-08 10:34:42.333 11 22 33 44 55 66 0 0 0
如果希望max()
符合where
条件,请使用窗口函数而不是子查询:
SELECT . . .
MAX([PT_100SCALED_VAL0]) OVER () as PT_100SCALED_VAL0_MAXIMUM
但是我得到的是100而不是11。请提供一些样本数据进行测试,然后你可以帮助我,我做错了什么。列数据类型为float是否导致问题从下一次查询中得到的数字:
从[dbo].[REPORT]
中选择最大值(PT_100SCALED_VAL0)?如果与11不同,则您的示例数据不正确。通过运行您提到的查询,我得到的最大值为100,这是不正确的。我的数据有一些空值,并且为我的pt_100scaled_val0列重复了11次。您可能有多个架构中的报表表,可能有多个数据库混合在一起(为什么您的创建表
脚本绑定到主数据库?),甚至可能有数据库损坏(不太可能)。Simplemax()
无法创建不存在的值。运行从[dbo].[REPORT]中选择PT_100SCALED_VAL0,按PT_100SCALED_VAL0 desc
-您看到了哪些值?您是从这里复制粘贴我的查询还是自己键入的?那么,关于您最初的查询,为什么在t7之后有空间<代码>t7。[PT_100; u VAL0]