从纳秒时间戳按天分组
Group by day from nanosecond timestamp
我有一个 table 列 transaction_timestamp
将时间戳存储为具有 纳秒 分辨率的纪元。
如何按天对 and/or 进行分组?我想我必须先将纳秒时间戳转换为毫秒。我该怎么做?
我试过了:
SELECT DATE_TRUNC('day', CAST((transaction_timestamp /pow(10,6))as bigint)), COUNT(*)
FROM transaction
GROUP BY DATE_TRUNC('day', transaction_timestamp)
这是行不通的:
error: function date_trunc(unknown, bigint) does not exist
我也试过这个:
SELECT DATE_TRUNC('day', to_timestamp(transaction_timestamp / 1000000000.0)),
COUNT(*)
FROM transaction
GROUP BY DATE_TRUNC('day', transaction_timestamp)
按照此处的说明进行基本转换:
在 GROUP BY
中重复相同的表达式,或使用简单的位置引用,例如:
SELECT date_trunc('day', to_timestamp(transaction_timestamp / 1000000000.0))
, count(*)
FROM transaction
GROUP BY 1;
请注意,to_timestamp()
假定给定纪元的 UTC 时区会产生 timestamp with time zone
( timestamptz
)。下面的 date_trunc()
然后使用当前会话的 timezone
设置来确定截断“天”的位置。您可能想要明确定义某个时区...
基础知识:
- Ignoring time zones altogether in Rails and PostgreSQL
通常,最好先使用适当的 timestamptz
。不幸的是,Postgres 时间戳只提供微秒分辨率。由于您需要纳秒,因此您的方法似乎是合理的。
我有一个 table 列 transaction_timestamp
将时间戳存储为具有 纳秒 分辨率的纪元。
如何按天对 and/or 进行分组?我想我必须先将纳秒时间戳转换为毫秒。我该怎么做?
我试过了:
SELECT DATE_TRUNC('day', CAST((transaction_timestamp /pow(10,6))as bigint)), COUNT(*)
FROM transaction
GROUP BY DATE_TRUNC('day', transaction_timestamp)
这是行不通的:
error: function date_trunc(unknown, bigint) does not exist
我也试过这个:
SELECT DATE_TRUNC('day', to_timestamp(transaction_timestamp / 1000000000.0)),
COUNT(*)
FROM transaction
GROUP BY DATE_TRUNC('day', transaction_timestamp)
按照此处的说明进行基本转换:
在 GROUP BY
中重复相同的表达式,或使用简单的位置引用,例如:
SELECT date_trunc('day', to_timestamp(transaction_timestamp / 1000000000.0))
, count(*)
FROM transaction
GROUP BY 1;
请注意,to_timestamp()
假定给定纪元的 UTC 时区会产生 timestamp with time zone
( timestamptz
)。下面的 date_trunc()
然后使用当前会话的 timezone
设置来确定截断“天”的位置。您可能想要明确定义某个时区...
基础知识:
- Ignoring time zones altogether in Rails and PostgreSQL
通常,最好先使用适当的 timestamptz
。不幸的是,Postgres 时间戳只提供微秒分辨率。由于您需要纳秒,因此您的方法似乎是合理的。