与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子句中) 怎么了 为了澄清我的问题,我需要从数据中提取以下信息:
这应该可以完成单个扫描的工作,这似乎是必需的
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(扫描的平均时间,结束时的重量-开始时的重量)您的数据库系统是什么?哪个版本?