我想每隔两分钟对列进行求和(因此,这将是1,2和2,3和3,4的总和,等等...),但是我不确定如何去关于这样做。
我的数据类似于:
minute | source | count
2018-01-01 10:00 | a | 7
2018-01-01 10:01 | a | 5
2018-01-01 10:02 | a | 10
2018-01-01 10:00 | b | 20
2018-01-01 10:05 | a | 12
我想要什么 (例如,第1行+第2行,第2 + 3行,第3行,第4行,第5行)
minute | source | count
2018-01-01 10:00 | a | 12
2018-01-01 10:01 | a | 15
2018-01-01 10:02 | a | 10
2018-01-01 10:00 | b | 20
2018-01-01 10:05 | a | 12
答案 0 :(得分:0)
您可以使用相关子查询来选择共享源的时间间隔中记录的计数总和(我认为必须匹配源。如果没有,只需删除WHERE
中的比较条款。
SELECT "t1"."minute",
"t1"."source",
(SELECT sum("t2"."count")
FROM "elbat" "t2"
WHERE "t2"."source" = "t1"."source"
AND "t2"."minute" >= "t1"."minute"
AND "t2"."minute" <= "t1"."minute" + INTERVAL '1 MINUTE') "count"
FROM "elbat" "t1";
答案 1 :(得分:0)
以上文章假设所有时间戳均为分钟。如果您想全天每2分钟检查一次,可以使用generate_series函数。在每个间隔中包括开始分钟和结束时间的问题将是b在结果中包含2行。
即。
select begintime,
endtime,
source,
sum(count)
from mytable
inner join (
select begintime, endtime
from (
select lag(time, 1) over (order by time) as begintime,
time as endtime
from (
select *
from generate_series('2018-01-01 00:00:00', '2018-01-02 00:00:00', interval '2 minutes') time
) q
) q2
where begintime is not null
) times on minute between begintime and endtime
group by begintime, endtime, source
order by begintime, endtime, source
如果您不希望重叠,可以将“开始时间和结束时间之间的分钟”更改为“分钟>开始时间和分钟<=结束时间”