2017-01-19 6 views
1

旅行時間をエポックで区切って5分のビンで行います。合計は15分までです。これは、データがTMC値、日付、およびエポックによってセグメント化されているため、扱いにくいものです。いずれもユニークではありません。そのように:3つのレコードを合計して3つのフィールドを集計します

TMC   DATE EPOCH Travel_TIME_ALL_VEHICLES 
111N20176 7012015 64  63 
111N20176 7012015 76  112 
111N20176 7012015 80  114 
111N20176 7012015 83  127 
111N20176 7012015 91  58 
111N20176 7012015 93  117 

私は、最初の3つの移動時間は、一緒にように、次の3、その後、次の3、およびを追加する必要があります。

select *, sum(Travel_TIME_ALL_VEHICLES) over (order by EPOCH rows between 3 preceding and current row) as rolling_avg 
from [dbo].[FHWA_2015_weekend] 
WHERE TMC = '113P12373' order by DATE, EPOCH 
+0

「どれも[個別]ユニークであるの」 - 集合的に考慮されるときです。 – Strawberry

+1

奇妙なことに、これはmysqlというタグが付けられています。 – Strawberry

+0

これはMySQLコードではありません。質問に正しくタグを付けてください。 –

答えて

0

MySQLでは(質問にもともとタグが付けられていたため)、変数を使用してデータを列挙して集計できます。あなたのサンプルデータについては

は、この作業をする必要があり:

select tmc, date, sum(Travel_TIME_ALL_VEHICLES) 
from (select t.*, (@rn := @rn + 1) as rn 
     from t cross join 
      (select @rn := 0) params 
     order by date, epoch 
    ) t 
group by tmc, date, floor((@rn - 1)/3); 

を他のほとんどのデータベースでは、あなたは、この目的のためにrow_number()を使用します。

select tmc, date, sum(Travel_TIME_ALL_VEHICLES) 
from (select t.*, row_number() over (order by date, epoch) as rn 
     from t 
    ) t 
group by tmc, date, floor((rn - 1)/3); 
関連する問題