sql - 按列值的差异对 SQL 中的数据进行分组

标签 sql postgresql datetime group-by analytic-functions

我的 postgres 表中的日志表中有以下数据:

  1. logid => int(自动递增)
  2. start_time => bigint(存储纪元值)
  3. inserted_value => int

以下是存储在表中的数据(其中实际开始时间不是列,只是以 24 小时格式显示 UTC 格式的 start_time 值)

logid   user_id    start_time       inserted_value       start time actual
 1      1          1518416562       15                   12-Feb-2018 06:22:42
 2      1          1518416622       8                    12-Feb-2018 06:23:42 
 3      1          1518417342       9                    12-Feb-2018 06:35:42 
 4      1          1518417402       12                   12-Feb-2018 06:36:42 
 5      1          1518417462       18                   12-Feb-2018 06:37:42
 6      1          1518418757       6                    12-Feb-2018 06:59:17 
 7      1          1518418808       11                   12-Feb-2018 07:00:08

我想根据 start_time 的差异对值进行分组和求和

对于以上数据,应分三组计算总和:

  user_id         sum
   1              15 + 8
   1              9 + 12 + 18
   1              6 + 11

因此,每组中的值都有 1 分钟的差异。这个 1 可以被认为是任何 x 分钟的差异。

我也尝试过LAG功能,但无法完全理解它。我希望我能够解释我的问题。

最佳答案

您可以使用简单的group by来实现您想要的。只需使属于同一分钟的所有 start_time 值相等即可。例如

select user_id, start_time/60, sum(inserted_value)
from log_table
group by user_id, start_time/60

我假设您的 start_time 列包含表示毫秒的整数,因此 /60 会将它们正确截断为分钟。如果值是 float ,则应使用 floor(start_time/60)

如果您还想选择分组时人类可读的日期,可以将 to_timestamp((start_time/60)*60) 添加到选择列表中。

关于sql - 按列值的差异对 SQL 中的数据进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48740746/

相关文章:

SQL 性能(替换)

ruby-on-rails - 时区感知 postgres 查询为分钟、小时、天创建时间序列

日期时间格式转换为字符串忽略 AM/PM

python - 给定周内的天数/日期

php - 如何将大型维基百科 sql 文件导入 mysql 数据库?

sql - 无需并行提示和批量收集即可删除数百万条记录

sql - Oracle SQL 索引 DATE 与索引 TRUNC(DATE)

sql - 如何在 SQL CREATE TABLE 中使用常量?

sql - 在单个 SQL 查询中返回 json 层次结构

python - Pandas 使用另一列的值移动日期