我有一个像这样的简单时间序列:
time id area
2019-09-25T17:21:00Z 1 us
2019-09-25T17:22:00Z 1 uk
2019-09-25T17:23:00Z 2 canada
2019-09-25T17:24:00Z 3 us
2019-09-25T17:25:00Z 1 canada
我想计算每个不同 id 的最后一点的区域,所以结果应该是这样的:
area count
us 1
canada 2
由于 id 1 的最后一点是加拿大,我想忽略 id 1 的所有先前点。
如何仅查询每个不同 ID 的最近点?这可能吗?
编辑:这是我正在使用的实际数据。
name: click3
time area id value
---- ---- -- -----
1569480689926885700 travel session1 1
1569480693527591500 travel session2 1
1569480699951799900 vtc session3 1
1569480706416720700 health session1 1
1569480713265800900 claim session4 1
1569480719882312600 health session3 1
area
确实id
是标签。select LAST(value)
当我用 a做一个简单的事情时GROUP BY
,我得到以下信息:
> select last(value) as value, area, id from click3 group by id
name: click3
tags: id=session1
time value area id
---- ----- ---- --
1569480706416720700 1 health session1
name: click3
tags: id=session2
time value area id
---- ----- ---- --
1569480693527591500 1 travel session2
name: click3
tags: id=session3
time value area id
---- ----- ---- --
1569480719882312600 1 health session3
name: click3
tags: id=session4
time value area id
---- ----- ---- --
1569480713265800900 1 claim session4
这是正确的 - 每个唯一会话 ID 的最后一点。当我select * from
将此查询作为子查询时,结果是
> select * from (select last(value) as value, area, id from click3 group by id)
name: click3
time area id id_1 value
---- ---- -- ---- -----
1569480693527591500 travel session2 session2 1
1569480706416720700 health session1 session1 1
1569480713265800900 claim session4 session4 1
1569480719882312600 health session3 session3 1
当我添加像 COUNT(*) 或 SUM(value) 这样的聚合时,我看到了预期的数字 4:
> select count(*) from (select last(value) as value, area, id from click3 group by id)
name: click3
time count_value
---- -----------
0 4
但是,如果我GROUP BY area
在此查询中添加 a,我希望看到 travel 的值为 1,health 的值为 2,并声称其值为 1。出于某种原因,这似乎是完整的原始数据集使用点而不是从子查询中减少集合,所以我最终得到了这个:
> select count(*) from (select last(value) as value, area from click3 group by id) group by area
name: click3
tags: area=claim
time count_value
---- -----------
0 1
name: click3
tags: area=health
time count_value
---- -----------
0 2
name: click3
tags: area=travel
time count_value
---- -----------
0 2
name: click3
tags: area=vtc
time count_value
---- -----------
0 1
我想我一定是严重误解了 influxdb 的工作原理。我错过了什么?