2010-04-05 111 views
1

我对SQL很陌生。 我有一个基于道路/里程数记录的数据库。我的目标是在道路上每52.8英尺获得一个平均值。我的相关表格每15英尺有一个数据,当然这个表格有一个与主表相关的外键。基于距离的SQL平均数据

如果我想按照给定的里程碑每52.8英尺取出一次平均值,我该如何去做呢?

实施例的数据:

 
    RecID Begin_MP End_MP 

    100 0 0.56 

    RecID MP Value1 Value2 
    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 

第一数据是一道道的例子。数据的第二子集的值我需要查询每52.8英尺

谢谢

+0

我不能完全肯定,我理解的问题。你需要内插吗?您能否给我们提供您期望获得的示例数据的输出结果? – 2010-04-05 20:57:27

+0

什么味道和版本的SQL? MySQL的? SQL Server?甲骨文? – Thomas 2010-04-05 21:31:16

+0

MySQL很好。我不需要内插,只是52.8以下的任何东西的平均值,以及52.8和105.6之间的任何值。等等.. – jsmith 2010-04-05 21:35:26

回答

2

你可以组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