1

私はSQLにかなり慣れていません。道路/マイルポイントに基づくレコードを含むデータベースがあります。私の目標は、道路に沿って 52.8 フィートごとに平均値を取得することです。私の関連テーブルには 15 フィートごとにデータがあります。もちろん、このテーブルにはプライマリ テーブルに関連する外部キーがあります。

特定のマイルポストに沿って 52.8 フィートごとに平均値を取得したい場合、どうすればよいでしょうか?

サンプルデータ:

    RecID Begin_MP End_MP

    100 0 0.56

    RecID 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

最初のデータは道路の例です。データの 2 番目のサブセットは、52.8 フィートごとに照会する必要がある値です。

ありがとうございました

4

1 に答える 1

2

データを 52.8 フィートのブロックにグループ化できます。これを行う 1 つの方法は、距離を 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-05T20:56:43.093 に答える