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

Lindorm:最新値のクエリ

最終更新日:Aug 26, 2026

LATEST 関数は、指定されたフィールド列について、時系列ごとに最新の N 個の値を返します。デバイスの現在のステータスを表示したり、センサーの最後の測定値を取得したり、リアルタイムモニタリングダッシュボードを構築したりする際に使用します。

対象エンジンとバージョン

最新値クエリは時系列エンジンにのみ適用され、バージョンの制限はありません。

構文

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 
説明

最新値クエリは、offsetlimit、または group by field 句と直接組み合わせることはできません。ただし、サブクエリを使用することで、これらの句と組み合わせて使用できます。

パラメーター

セレクター

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

最新値関数式 (latest '(' field_name [ ',' N] ')')

LATEST 関数のみがサポートされており、LATEST 関数は RATEDELTAMAXMIN などの他の関数と組み合わせることはできません。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 値は、そのタイムスタンプでそのフィールドのデータが記録されなかったことを意味します。

最新値のクエリ

デバイス F07A1260F07A1261 の最新の温度データを照会します。

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 個の値のクエリ

デバイス F07A1260F07A1261 の最新の 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 句と組み合わせて、デバイス F07A1260F07A1261 それぞれの最新の 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 件の温度レコードを照会します。クエリ結果の 2 番目のレコードを返すには、LIMIT (返される行数) と OFFSET (オフセット) を 1 に設定します。

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        |
+-----------+----------+-------------+