0

次のような単純な時系列があります。

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)にすると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

しかし、このクエリに a を追加する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

influxdb の仕組みをかなり誤解しているに違いないと思います。私は何が欠けていますか?

4

1 に答える 1