我的 postgres 表中的日志表中有以下数据:
- logid => int(自动递增)
- start_time => bigint(存储纪元值)
- 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/