У меня есть простой временной ряд, подобный этому:
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
Я хочу получить подсчет областей для последней точки каждого отдельного идентификатора, поэтому результат должен быть примерно таким:
area count
us 1
canada 2
Поскольку последняя точка для идентификатора 1 - это Канада, я хочу игнорировать все предыдущие точки для идентификатора 1.
Как запросить только самую последнюю точку для каждого отдельного идентификатора?Возможно ли это?
Редактировать: Вот фактические данные, с которыми я работаю.
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)
с 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
, что правильно - последняя точка для каждого уникального идентификатора сеанса.Когда я 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 (значение), я вижу ожидаемое число 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
к этому запросу, я ожидаю, что путешествие будет иметь значение 1, здоровье будет иметь значение 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
Я думаю, что у меня должно быть существенное недопонимание того, как работает effxdb.Чего мне не хватает?