【发布时间】:2015-06-03 13:27:02
【问题描述】:
现在我尝试解决一个问题,我的理解似乎与Finding gaps in huge event streams? 有某种关系
我的表中有多个数据流。我想按时间总结它们,但它们并不总是相同的时间戳。该表如下所示:
架构:
CREATE TABLE Table1
("id" int, "stream_id" int, "timestamp" timestamp, "value" real)
;
INSERT INTO Table1
("id", "stream_id", "timestamp", "value")
VALUES
(1, 7, '2015-06-01 15:20:30', 0.1),
(2, 7, '2015-06-01 15:20:31', 0.2),
(3, 7, '2015-06-01 15:20:32', 0.3),
(4, 7, '2015-06-01 15:25:30', 0.5),
(5, 7, '2015-06-01 15:25:31', 1.0),
(6, 6, '2015-06-01 15:20:31', 1.1),
(7, 6, '2015-06-01 15:20:32', 1.2),
(8, 6, '2015-06-01 15:20:33', 1.3),
(9, 6, '2015-06-01 15:25:31', 1.5),
(10, 6, '2015-06-01 15:25:32', 2.0)
;
我尝试解决它:
with ts as (select "timestamp"
from Table1
order by "timestamp"
),
data as (select "timestamp","value"
from Table1
order by "timestamp"
),
streams as (select "stream_id"
from Table1
group by "stream_id"
order by "stream_id"
)
select * .... (question)
我希望得到所有汇总数据的图表线。当一次,其他流中没有数据时,总和应该采用timestamp < current_timestamp 但在当前时间戳最近的行。如果没有值,则假设为 0。
我想过递归查询,但不知何故我没有看到解决方案......
编辑:这里我试图用图形解释它:
编辑 2:
我想过这样的事情,但我没有得到最后一个“东西”来完成它。
with RECURSIVE data as (
select * from rawdata
where date(date_time)='2014-05-01'
),
streams as (
select stream_id from data
group by stream_id
),
t(n) AS (
VALUES (1)
UNION ALL
SELECT n+1 FROM t WHERE n < (select count(*) from streams)
)
SELECT n FROM t;
【问题讨论】:
-
我对你的要求有点困惑。您只需要每个流的总和还是按时间分桶的每个流的总和。如果您需要分桶,您的时间桶的分辨率是多少? IE。你想按分钟计算一个流的值总和吗?5 分钟?等等……
-
我更新了我的问题以更好地解释它。我不想用桶或时间片来总结它们。我不知道怎么用英文解释,所以我试着用图形来解释。
-
你想求和多少个数字? 3个或更多?该图表明每个总和正好包含 3 个项。这是否意味着您要对最后 3 个数字求和,并且每个数字都必须来自不同的流?
-
我有 n 个流,每个总和由 n 个加法组成。在示例中:n = 3。和的每个元素都来自另一个流,或 0。