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:10) 扫描 (MeanTime) 例如 Scannumber 01),即 12:05
  2. 我需要结束和开始之间的重量差
  3. 我必须从重量差异和开始和结束之间的时间计算“流量”
  4. 总而言之,我需要两个数据 Meantime 和 flow,我想绘制它们(随时间流动)
4

1 回答 1

0

This should do the job for an individual Scan, which appears to be the requirement.

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 回答