すべてのプロダクト
Search
ドキュメントセンター

Lindorm:最新値のクエリ

最終更新日:Jan 14, 2025

LATEST 関数を使用すると、時系列テーブルの指定された列の最新の N 行のデータを、時系列の最新の時点に基づいてクエリできます。

適用可能なエンジンとバージョン

最新値クエリは、LindormTSDB のすべてのバージョンにのみ適用できます。

構文

select_latest_by_statement ::=  SELECT ( select_clause )
                                FROM table_identifier
                                WHERE where_clause 
                                SAMPLE BY 0
select_clause              ::=  selector [ AS identifier ] ( ',' selector [ AS identifier ] )
selector                   ::=  tag_identifier | time | latest '(' field_name [ ',' N ] ')'
where_clause               ::=  relation ( AND relation )* (OR relation)*
relation                   ::=  ( field_identifier | tag_identifier ) operator term
operator                   ::=  '=' | '<' | '>' | '<=' | '>=' | '!=' | IN 
説明

最新値クエリは、OFFSET、LIMIT、GROUP BY などの句と直接使用することはできません。 これらの句を含む SQL ステートメントで、最新値クエリをサブクエリとして使用できます。

パラメーター

セレクター

タグ列(tag_identifier)、タイムスタンプ列(time)、および LATEST 関数の式をセレクターとして指定できます。

LATEST 関数の式は、latest '(' field_name [ ',' N] ')' という形式です。

式では LATEST 関数のみがサポートされています。 LATEST 関数は、RATE、DELTA、MAX、MIN などの他の関数と組み合わせて使用することはできません。 次の表に、LATEST 関数で設定できるパラメーターを示します。

パラメーター

説明

field_name

フィールド列の名前。

N

フィールド列でクエリする最新の値の数を指定する整数。 このパラメーターのデフォルト値は 1 で、フィールド列の最新値のみがクエリされることを示します。

次の例では、サンプルテーブル sensor は、次のステートメントを実行することによって作成されます。

-- テーブルを作成します。
CREATE TABLE sensor (
    device_id VARCHAR TAG,
    region VARCHAR TAG,
    time   TIMESTAMP,
    temperature DOUBLE,
    humidity DOUBLE,
    PRIMARY KEY(device_id));

-- テーブルにデータを挿入します。
INSERT INTO sensor (device_id, region, time, temperature, humidity) VALUES
    ('F07A1260','north-cn','2021-04-22 15:33:00',12.1,45),
    ('F07A1260','north-cn','2021-04-22 15:33:10',13.2,47),
    ('F07A1260','north-cn','2021-04-22 15:33:20',10.6,null),
    ('F07A1260','north-cn','2021-04-22 15:33:30',null,48),
    ('F07A1260','north-cn','2021-04-22 15:33:20',10.6,46),
    ('F07A1261','south-cn','2021-04-22 15:33:00',18.1,44),
    ('F07A1261','south-cn','2021-04-22 15:33:10',19.7,44);
説明

上記のステートメントの null 値は、対応する時点ではテーブルにデータが書き込まれていないことを示します。

最新のデータ行をクエリする

F07A1260 デバイスと F07A1261 デバイスの最新の温度値をクエリします。

SELECT device_id,region,time,latest(temperature) AS temperature FROM sensor WHERE device_id in ('F07A1260', 'F07A1261') SAMPLE BY 0;

次の結果が返されます。

+-----------+----------+---------------------------+-------------+
| device_id |  region  |           time            | temperature |
+-----------+----------+---------------------------+-------------+
| F07A1261  | south-cn | 2021-04-22T15:33:10+08:00 | 19.7        |
| F07A1260  | north-cn | 2021-04-22T15:33:20+08:00 | 10.6        |
+-----------+----------+---------------------------+-------------+

最新の N 行のデータをクエリする

F07A1260 デバイスと F07A1261 デバイスの最新の 2 つの温度値をクエリします。

SELECT device_id,region,time,latest(temperature, 2) AS temperature FROM sensor WHERE device_id in ('F07A1260', 'F07A1261') SAMPLE BY 0;

次の結果が返されます。

+-----------+----------+---------------------------+-------------+
| device_id |  region  |           time            | temperature |
+-----------+----------+---------------------------+-------------+
| F07A1261  | south-cn | 2021-04-22T15:33:10+08:00 | 19.7        |
| F07A1261  | south-cn | 2021-04-22T15:33:00+08:00 | 18.1        |
| F07A1260  | north-cn | 2021-04-22T15:33:20+08:00 | 10.6        |
| F07A1260  | north-cn | 2021-04-22T15:33:10+08:00 | 13.2        |
+-----------+----------+---------------------------+-------------+

複数の列の最新値をクエリする

F07A1260 デバイスの複数の列の最新値をクエリします。

SELECT device_id,region,time,latest(temperature) AS temperature, latest(humidity) AS humidity FROM sensor WHERE device_id in ('F07A1260') SAMPLE BY 0;

次の結果が返されます。

+-----------+----------+---------------------------+-------------+----------+
| device_id |  region  |           time            | temperature | humidity |
+-----------+----------+---------------------------+-------------+----------+
| F07A1260  | north-cn | 2021-04-22T15:33:30+08:00 | null        | 48       |
| F07A1260  | north-cn | 2021-04-22T15:33:20+08:00 | 10.6        | null     |
+-----------+----------+---------------------------+-------------+----------+
説明

複数の列の最新値は、異なる行にある場合があります。 行の他の値は、調整のために null 値で埋められます。

ネストされたクエリを実行する

GROUP BY 句を使用して、F07A1260 デバイスと F07A1261 デバイスの最新の 2 つの温度値の最大値をクエリします。

SELECT device_id, max(temperature) AS max_temperature FROM (SELECT device_id, region,time, latest(temperature,2) AS temperature FROM sensor SAMPLE BY 0) GROUP BY device_id;

次の結果が返されます。

+-----------+-----------------+
| device_id | max_temperature |
+-----------+-----------------+
| F07A1261  | 19.7            |
| F07A1260  | 13.2            |
+-----------+-----------------+

ページクエリを実行する

F07A1260 デバイスと F07A1261 デバイスの最新の 2 つの温度値をクエリし、LIMITOFFSET を 1 に設定して、クエリ結果の 2 行目のデータを返します。

SELECT device_id, region, temperature FROM (SELECT device_id, region, time, latest(temperature,2) AS temperature FROM sensor SAMPLE BY 0) LIMIT 1 OFFSET 1;

次の結果が返されます。

+-----------+----------+-------------+
| device_id |  region  | temperature |
+-----------+----------+-------------+
| F07A1261  | south-cn | 18.1        |
+-----------+----------+-------------+