2016-03-24 12 views
0

単純なselect max関数が間違った値を返す。私は以下のクエリを実行するとき、私は最大値を100として、列の現在の最大値として11を取得しています。私はこのクエリを実行するときに私はもう一つの問題を抱えています。私が間違っていること。max(columnname)が間違った出力を返す

REPORT

以下
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] 

FROM SELECT MAX(小数点としてキャスト([PT_100SCALED_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 
+0

次のクエリから得られる数値は次のとおりです。「[dbo]。[REPORT] 'から最大値(PT_100SCALED_VAL0)を選択してください。 11と異なる場合は、サンプルデータが正しくありません。 – Arvo

+0

あなたが言及したクエリを実行することによって私は間違っている最大値として100を取得しています。私のデータにはいくつかのヌル値があり、11回はpt_100scaled_val0列に対して何回も繰り返されます – Tan

+0

できません。あなたは複数のスキーマにREPORTテーブルを持っているかもしれません。複数のデータベースが混在しているかもしれません( 'create table'スクリプトが' master'データベースに結びついているのはなぜですか?)。単純な 'max()'は存在しない値を作成することはできません。 '[dbo]からPT_100SCALED_VAL0を選択して実行してください。[PT_100SCALED_VAL0 desc]によって[REPORT]命令を実行してください。ここから私のクエリをコピー・ペーストしましたか、それとも自分で入力しましたか?その後、元のクエリについて、なぜそこにスペースがあるのですか? ? 't7。 [PT_100SCALED_VAL0] ' – Arvo

答えて

0

where条件の下でmax()を使用する場合は、ウィンドウの楽しみを使用してくださいサブクエリの代わりに次のように入力します。

SELECT . . . 
     MAX([PT_100SCALED_VAL0]) OVER() as PT_100SCALED_VAL0_MAXIMUM 
+0

まだ私は11の代わりに100を得ています – Tan

+0

テストするサンプルデータを提供します – TheGameiswar

+0

私はすでにサンプルデータを最下部に提供しています – Tan

関連する問題