2

例を挙げて、私が何を意味するかを説明してみましょう。

PostgreSQL バージョン 9.2.1 を使用しています

データは次のように構成されています。

(timedate)date           | (float) data    |  ...
"2013-03-23 03:58:00-04" | 66819.59        |  ...
"2013-03-23 03:59:00-04" | 64277.22        |  ...
"2013-03-23 03:59:00-04" | 46841.75        |  ...
"2013-03-23 04:00:00-04" | 69697.38        |  ...
"2013-03-23 04:00:00-04" | 69452.69        |  ...
"2013-03-23 04:01:00-04" | 69697.47        |  ...

私のテーブルには 500 万を超えるデータ ポイントがあります。開始日と終了日の範囲内でデータを取得する方法は既に知っています。

ここに私の問題があります:範囲が大きすぎる場合、データ全体に及ぶと言って、500万行すべてが返されます。データを省略せずに返される行を制限したいと思います。

たとえば、5 行を返したい場合、最初の行を最初の 100 万行のデータの平均にする必要があります。2 番目の行は 2 番目の 100 万行のデータの平均などです。

助けとアドバイスをありがとう!

4

1 に答える 1

1

1日の平均が必要な場合:

select
    date_trunc('day', "date")::date "day",
    avg("data") "data"
from t
group by 1
order by 1

またはお好みで変更'day'してください。'month''week'

http://www.postgresql.org/docs/current/interactive/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC

データを日付順に並べた 5 つのチャンクに分割したい場合は、次のようにします。

select
    floor(
        (row_number() over(order by "date"))::double precision
        * 5
        / (select count(*) from t)
    ) chunk,
    avg("data") "data"
from t
group by 1
order by 1
于 2013-04-17T19:21:00.987 に答える