你可以组52.8英尺块中的数据。一种方法是将距离除以52.8,然后将其整数。这样,25属于组1,100属于组2,110属于组3,依此类推。
在SQL Server中,你会写这样的:
select
52.8 * cast(dist/52.8 as int) as Distance
, avg(value1)
, avg(value2)
from YourTable
group by cast(dist/52.8 as int)
下面是与您的数据的例子。由于数据从0至0.04,我将它计算出每0.01英尺块平均值:
declare @Road table (RecID int, Begin_MP float, End_MP float)
insert into @Road select 100, 0, 0.56
declare @Values table (RecID int, MP float, Value1 float, Value2 float)
insert into @Values values
(100, 0 , 159 , 127.7),
(100, 0.003, 95.3 , 115.3),
(100, 0.006, 82.3 , 107),
(100, 0.009, 56.5 , 74.5),
(100, 0.011, 58.1 , 89.1),
(100, 0.014, 95.2 , 78.8),
(100, 0.017, 108.9, 242.5),
(100, 0.02 , 71.8 , 73.3),
(100, 0.023, 84.1 , 80.2),
(100, 0.026, 65.5 , 66.1),
(100, 0.028, 122 , 135.8),
(100, 0.031, 99.9 , 230.7),
(100, 0.034, 95.7 , 111.5),
(100, 0.037, 127.3, 74.3),
(100, 0.04 , 140.7, 543.1);
select
r.RecID
, cast(v.MP/0.01 as int)*0.01 as StartMP
, AVG(v.Value1) as AvgVal1
, AVG(v.Value2) as AvgVal2
from @Road as r
left join @Values as v
on r.RecID = v.RecID
group by r.RecID, cast(v.MP/0.01 as int)
此打印:
RecID StartMP AvgVal1 AvgVal2
100 0.00 98,275 106,125
100 0.01 87,4 136,8
100 0.02 85,85 88,85
100 0.03 107,63 138,83
100 0.04 140,7 543,1
我不能完全肯定,我理解的问题。你需要内插吗?您能否给我们提供您期望获得的示例数据的输出结果? – 2010-04-05 20:57:27
什么味道和版本的SQL? MySQL的? SQL Server?甲骨文? – Thomas 2010-04-05 21:31:16
MySQL很好。我不需要内插,只是52.8以下的任何东西的平均值,以及52.8和105.6之间的任何值。等等.. – jsmith 2010-04-05 21:35:26