2016-05-20 22 views
0

私はタイムスタンプ付きのイベントデータのコレクションを持っており、これらのイベントが発生した平均時間(算術平均)と標準偏差(時間単位)を知りたいと思います。タイムスタンプはUTCタイムゾーンで表されますが、イベントは異なるタイムゾーンで発生した可能性のあるユーザーのアクティビティの結果です。 UTC + 12、と私はどちらがわかりません。時刻の平均と標準偏差を計算するPostgreSQL

これはまっすぐに進むようですが、24時間の周期的な性質のため、明らかではありません。 (例えば、23と0時間は、数学的に実際に接近している、ではない。)

はここに例を示します

これらの時間を考える:3, 4, 3, 0, 21, 23, 4は、平均値は8.3と標準偏差(人口)8.8になりそうです。しかし、これらのイベントがUTC + 12で発生した場合、「実際の」時間は15, 16, 15, 12, 9, 11, 16となり、平均値は13.4、標準dev(pop)2.6となります。

正しい平均(UTCでは13.4)とstddev(pop)(2.6)を計算する最良の方法は何ですか?

例データ(events表):(

 Mean  |  Stddev 
-----------------+----------------- 
29828.5714285714 | 31602.4282198023 

SELECT CAST(avg(extract(epoch FROM timestamp::TIME)) AS dec(18, 10)), 
     CAST(stddev_pop(extract(epoch FROM timestamp::TIME)) AS dec(18, 10)) 
FROM events 

現在の結果:

id |  timestamp 
---+-------------------- 
1 | 2016-05-20 03:00:00 
2 | 2016-05-20 04:00:00 
3 | 2016-05-20 03:00:00 
4 | 2016-05-20 00:00:00 
5 | 2016-05-20 21:00:00 
6 | 2016-05-20 23:00:00 
7 | 2016-05-20 04:00:00 

私が今使っているPostgreSQLのクエリは以下のとおりです。これは数秒で、これは平均で8.3、標準dev 8.8です。

期待される結果は平均〜13.4、標準偏差〜2.6です。

+0

dbスキーマのサンプルデータと予想される結果を表示してください。私は例を参照してくださいどのようにdbに保存されているかわからない。 –

+0

私は理解していない、期待される結果は13.4、標準dev 2.6を意味するか、それとも1.4、標準dev 2.6を意味するのでしょうか? – kaisquared

+0

固定@kaisquared – jstr

答えて

0

AT TIME ZONEを使用してタイムゾーンを変換できます。

SET TIME ZONE 'UTC'; 

WITH 
test(id, dummy_time) as 
(
values 
(1, TIMESTAMP '2016-05-20 03:00:00'), 
(2, TIMESTAMP '2016-05-20 04:00:00'), 
(3, TIMESTAMP '2016-05-20 03:00:00'), 
(4, TIMESTAMP '2016-05-20 00:00:00'), 
(5, TIMESTAMP '2016-05-20 21:00:00'), 
(6, TIMESTAMP '2016-05-20 23:00:00'), 
(7, TIMESTAMP '2016-05-20 04:00:00') 
) 

SELECT  avg(date_part('HOUR', dummy_time AT TIME ZONE 'UTC+12')) as AVERAGE_HOUR, 
      stddev_pop(date_part('HOUR', dummy_time AT TIME ZONE 'UTC+12')) as STDEV_HOUR 

FROM  test 

これは、あなたが探している13.4平均と2.6標準を提供します。

+0

これは、タイムゾーンがUTC + 12であることがわかっていれば良い解決策になりますが、実際にはどのタイムゾーンが最初の段落で説明されているか分かりません。 1つの選択肢は、候補のタイムゾーンのいくつかをチェックし、最良のタイムゾーンを使用することですが、これを正確に行う方法があるようです。 – jstr

+0

その場合、私はあなたの設定を理解しているとは思わない。あなたの価値がどのタイムゾーンから来ているかをどうやって確認しますか?小切手はあなたが既にリアルタイムタイムゾーンが何であるべきかを知っていることを示唆しています。問題の根本は、時代が時代に左右されない価値として保存されているという事実だと私は思うが、それを固定することは必ずしも単純ではないかもしれないと理解している。 – kaisquared

+0

最も基本的な言葉では、私はすべての時間がUTCであり、それらの時間の平均と標準時を知りたい。問題は時間が異なるタイムゾーンで発生し、時間が循環的であるため(23が0に近いため)、整数のように扱うのは簡単ではありません。私はこれが意味をなさないと思いますか? – jstr

関連する問題