我有一个表列transaction_timestamp
,将时间戳存储为具有纳秒分辨率的纪元。
如何按天分组和/或计数?我想我必须首先将纳秒时间戳转换为毫秒。我怎样才能做到这一点?
我尝试过:
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 时区,以生成带时区的时间戳
(timestamptz
)。然后,以下 date_trunc()
使用当前 session 的 timezone
设置来确定在何处截断“天”。您可能想明确定义某个时区...
基础知识:
通常,最好一开始就使用正确的timestamptz
。不幸的是,Postgres 时间戳仅提供微秒分辨率。由于您需要纳秒,因此您的方法似乎是合理的。
关于sql - 从纳秒时间戳按天分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71449923/