メインコンテンツまでスキップ
メインコンテンツまでスキップ

時系列関数

以下の関数は、timeSeries*() 集計関数と一緒に使用するために設計されています。例えば timeSeriesInstantRateToGridtimeSeriesLastToGrid などです。

timeSeriesRange

タイムスタンプの範囲を生成します。

構文

timeSeriesRange(start_timestamp, end_timestamp, step)

引数

  • start_timestamp - 範囲の開始。
  • end_timestamp - 範囲の終了。
  • step - 範囲のステップ(秒単位)。

返される値

  • タイムスタンプの範囲 [start_timestamp, start_timestamp + step, start_timestamp + 2 * step, ..., end_timestamp] を返します。

クエリ:

SELECT timeSeriesRange('2025-06-01 00:00:00'::DateTime64(3), '2025-06-01 00:01:00'::DateTime64(3), 30) AS rng;

結果:

┌────────────────────────────────────result─────────────────────────────────────────┐
│ ['2025-06-01 00:00:00.000', '2025-06-01 00:00:30.000', '2025-06-01 00:01:00.000'] │
└───────────────────────────────────────────────────────────────────────────────────┘

注意事項

  • start_timestampend_timestamp に等しい場合、関数 timeSeriesRange() はそのタイムスタンプを含む1要素の配列を返します: [start_timestamp]
  • 関数 timeSeriesRange() は、関数 range に似ています。 例えば、タイムスタンプの型が DateTime64(3)start_timestamp < end_timestamp の場合、timeSeriesRange(start_timestamp, end_timestamp, step) は次の式と同じ結果を返します:
range(start_timestamp::Int64, end_timestamp::Int64 + 1, step::Int64)::Array(DateTime64(3))

timeSeriesFromGrid

値の配列 [value1, value2, value3, ..., valueN] をタプルの配列 [(start_timestamp, value1), (start_timestamp + step, value2), (start_timestamp + 2 * step, value3), ..., (end_timestamp, valueN)] に変換します。

もし値のいくつか [value1, value2, value3, ...]NULL の場合、関数はそのNULL値を結果の配列にコピーしませんが、現在のタイムスタンプは増加し続けます。例えば [value1, NULL, value2] の場合、関数は [(start_timestamp, value1), (start_timestamp + 2 * step, value2)] を返します。

現在のタイムスタンプは、end_timestamp より大きくなるまで step だけ増加し、各タイムスタンプは指定された値の配列からの値と組み合わされます。もし値の数がタイムスタンプの数と一致しない場合、関数は例外をスローします。

構文

timeSeriesFromGrid(start_timestamp, end_timestamp, step, values);

引数

  • start_timestamp - グリッドの開始。
  • end_timestamp - グリッドの終了。
  • step - グリッドのステップ(秒単位)。
  • values - 値の配列 [value1, value2, ..., valueN]

返される値

  • start_timestampstep によって定義された定期的な時間グリッド上のタイムスタンプと結合されたソースの値の配列を返します。

クエリ:

SELECT timeSeriesFromGrid('2025-06-01 00:00:00'::DateTime64(3), '2025-06-01 00:01:30.000'::DateTime64(3), 30, [10, 20, NULL, 30]) AS result;

結果:

┌─────────────────────────────────────────────result─────────────────────────────────────────────┐
│ [('2025-06-01 00:00:00.000',10),('2025-06-01 00:00:30.000',20),('2025-06-01 00:01:30.000',30)] │
└────────────────────────────────────────────────────────────────────────────────────────────────┘

注意 関数 timeSeriesFromGrid(start_timestamp, end_timestamp, step, values) は次の式と同じ結果を返します:

arrayFilter(x -> x.2 IS NOT NULL, arrayZip(timeSeriesRange(start_timestamp, end_timestamp, step), values))