sql - 从纳秒时间戳按天分组

标签 sql postgresql timestamp epoch

我有一个表列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/

相关文章:

mysql - 如何在 mysql5 存储过程中内爆查询结果?

mysql - 复合主键,显示一同一异的条目

java - PostgreSQL:列 "BOOLEAN_VALUE"是数字类型,但表达式是 boolean 类型提示:您需要重写或强制转换表达式

database - 在数据库中建模 1 到 1..n 关系

postgresql - 没有要加载的文件——sequel/adapters/and Invalid DATABASE_URL with heroku

SQL Server - 从一个表中选择多行数据并使用第一个选定的数据更新另一个表上的多行数据

mysql - 对多个表使用 UNION 和 WHERE

python - 使用 MultiIndex 时如何将此 Pandas 列类型保留为日期时间?

ffmpeg 时间戳到日志文件

php - 如何创建人类可读的时间戳?