基于距离的SQL平均数据

基于距离的SQL平均数据,sql,database,distance,Sql,Database,Distance,我对SQL很陌生。 我有一个数据库,里面有基于道路/里程点的记录。我的目标是沿着道路每52.8英尺获得一个平均值。我的相关表每15英尺有一个数据,这个表当然有一个外键,它与主表相关 如果我想沿着一个给定的里程碑,每隔52.8英尺取一个平均值,我该怎么做呢 示例数据: RecID Begin_MP End_MP 100 0 0.56 RecID MP Value1 Value2 100 0 159 127.7 100

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

如果我想沿着一个给定的里程碑,每隔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 循环开始\u MP结束\u MP 100 0 0.56 累进MP值1值2 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英尺查询的值


谢谢

您可以将数据分组到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

我不能完全肯定我是否理解这个问题。你需要插值吗?您能告诉我们您希望得到的示例数据的输出吗?SQL的风格和版本是什么?MySQL?SQL Server?Oracle?MySQL很好。我不需要插值,只要是52.8以下的平均值,以及52.8到105.6之间的平均值。等