0

フローとして評価したい経時的な重みを含むテーブルがあります。

Scan    TimeStamp       Position  Weight
01      14/11/01 12:00  0         0
01      14/11/01 12:10  10        1.6
02      14/11/01 13:00  0         2.6
02      14/11/01 13:10  10        4.2
...

ここで、スキャン中 (開始から終了まで) の流れを計算したいと思います。私のクエリは次のようになります。

Select MeanTime, TheFlow From
(Select AVG(TheTimeStamp) as MeanTime From flow Where ScanNumber=73),
(Select Weightdiff / TimeSpan as TheFlow From
      (Select (MaxWeight - MinWeight) as WeightDiff From
           (Select Weight as MAXWEIGHT from Flow Where ScanNumber=73 HAVING "POSITION"=MAX("POSITION")),
           (Select Weight as MINWEIGHT from FLOW Where ScanNumber=73 HAVING "POSITION"=MIN("POSITION")),
      (Select (MaxTime - MinTime) * 24 as TimeSpan From
           (Select MAX("THETIMESTAMP") as MaxTime From FLOW Where ScanNumber=73),
           (Select MIN("THETIMESTAMP") as MinTime From Flow Where ScanNumber=73))));

エラーが発生します:

SQL エラー コード = -104。
選択リストに無効な式があります (集約関数にも GROUP BY 句にも含まれていません)。

どうしたの?

私の質問を明確にするために、データから次の情報を抽出する必要があります。

  1. 開始 (例: 12:00) と終了 (例: 12:00) の間の平均時間。スキャンの 12:10) (MeanTime) 例: Scannumber 01)、つまり 12:05
  2. エンドとスタートの重量差が必要
  3. 重量差と開始と終了の間の時間から「フロー」を計算する必要があります
  4. 全体として、プロットしたい2つのデータMemtimeとflowが必要です(経時的な流れ)
4

1 に答える 1

0

これは、要件であると思われる個々のスキャンに対してジョブを実行する必要があります。

DECLARE @Scan INT = 1
SELECT 
    MeanTime = DATEADD(SECOND, DATEDIFF(SECOND, FirstScan.TimeStamp, LastScan.TimeStamp), FirstScan.TimeStamp)
    , WeightDifference = LastScan.Weight - FirstScan.Weight
FROM
    (SELECT Position = MIN(Position) FROM Flow WHERE Scan = @Scan) MinScan
    CROSS JOIN (SELECT Position = MAX(Position) FROM Flow WHERE Scan = @Scan) MaxScan
    INNER JOIN Flow FirstScan ON MinScan.Position = FirstScan.Position
        AND FirstScan.Scan = @Scan
    INNER JOIN Flow LastScan ON MaxScan.Position = LastScan.Position
        AND LastScan.Scan = @Scan
于 2014-11-28T19:02:00.823 に答える