与SQL聚合函数抗争

与SQL聚合函数抗争,sql,aggregates,Sql,Aggregates,我有一个包含随时间变化的权重的表,我想将其作为流量进行评估: 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 ... 现在我想计算扫描期间的流量(开始到结束)。 我

我有一个包含随时间变化的权重的表,我想将其作为流量进行评估:

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。
select列表中的表达式无效(未包含在聚合函数或GROUP BY子句中)

怎么了

为了澄清我的问题,我需要从数据中提取以下信息:

  • 扫描开始(如12:00)和结束(如12:10)之间的平均时间(同时) e、 g.扫描编号01),即12:05
  • 我需要终点和起点之间的重量差
  • 我必须根据重量差和开始和结束之间的时间来计算“流量”
  • 总之,我需要两个数据和流,我想绘制(随时间流动)

  • 这应该可以完成单个扫描的工作,这似乎是必需的

    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
    

    “扫描时计算流量”是什么意思?你的意思是计算开始和停止之间的重量差?您能提供所需的输出吗?所需的输出应该是这样的:14/11/01 12:05 1.6和14/11/01 13:05 1.6(扫描的平均时间,结束时的重量-开始时的重量)您的数据库系统是什么?哪个版本?