タイムスタンプを特定の境界に切り捨てることは、データベース処理で頻繁に行われる操作です。 Postgres の場合、date_trunc 関数はタイムスタンプを時または分に丸める簡単な方法を提供します。ただし、最も近い 5 分間隔に切り捨てるには、よりカスタマイズされたアプローチが必要です。
単純なアプローチ
5 分切り詰めの一般的な解決策は、date_trunc と整数の除算と乗算操作:
date_trunc('hour', val) + date_part('minute', val)::int / 5 * interval '5 min'
代替方法
タイムスタンプを 5 分間隔に切り捨てるには、2 つの代替方法が存在します:
方法 1:エポック算術
このメソッドは、タイムスタンプをエポック/UNIX 時間に変換し、最も近い 5 分間隔に切り捨ててから、タイムスタンプに変換し直すことによって計算します。次のクエリは、このアプローチを示しています。
SELECT to_timestamp( floor(EXTRACT(epoch FROM ht.time) / EXTRACT(epoch FROM interval '5 min')) * EXTRACT(epoch FROM interval '5 min') ) FROM huge_table AS ht
方法 2: date_trunc と date_part
この方法は単純なアプローチに似ていますが、date_trunc と date_part を別々に使用します。丸めを実現するために。次のクエリは、この方法を示しています。
SELECT date_trunc('hour', ht.time) + date_part('minute', ht.time)::int / 5 * interval '5 min' FROM huge_table AS ht
パフォーマンスの比較
大きなテーブルでのパフォーマンス テストでは、直接的なアプローチが両方の代替方法よりも優れていることがわかりました。結果は次のとおりです。
Method | Run 1 (seconds) | Run 2 (seconds) | Run 3 (seconds) |
---|---|---|---|
Epoch Arithmetic | 39.368 | - | 39.526 |
date_trunc and date_part | 34.189 | - | 37.028 |
結論
代替方法はある程度の汎用性とシンプルさを提供しますが、date_trunc と date_part を使用した単純なアプローチがタイムスタンプを切り捨てるための最速のソリューションを提供します。 Postgres では 5 分間隔に。
以上がPostgreSQL でタイムスタンプを 5 分間隔に効率的に切り詰める方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。