全部产品
Search
文档中心

Lindorm:Menanyakan nilai terbaru

更新时间:Jun 24, 2025

Anda dapat menggunakan fungsi LATEST untuk menanyakan N baris terbaru dari data di kolom tertentu tabel deret waktu berdasarkan titik waktu terbaru dalam deret waktu tersebut.

Mesin dan versi yang berlaku

Permintaan nilai terbaru hanya berlaku untuk semua versi LindormTSDB.

Sintaksis

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 
null

Permintaan nilai terbaru tidak dapat digunakan langsung dengan klausa seperti OFFSET, LIMIT, atau GROUP BY. Anda dapat menggunakan permintaan nilai terbaru sebagai subquery dalam pernyataan SQL yang mengandung klausa-klausa ini.

Parameter

selector

Anda dapat menentukan kolom tag (tag_identifier), kolom timestamp (time), dan ekspresi fungsi LATEST sebagai selector.

Ekspresi fungsi LATEST memiliki format berikut: latest '(' field_name [ ',' N] ')'

Hanya fungsi LATEST yang didukung dalam ekspresi. Fungsi LATEST tidak dapat digunakan bersama dengan fungsi lainnya, seperti RATE, DELTA, MAX, dan MIN. Tabel berikut menjelaskan parameter yang dapat dikonfigurasi untuk fungsi LATEST.

Parameter

Deskripsi

field_name

Nama kolom bidang.

N

Bilangan bulat yang menentukan jumlah nilai terbaru yang ingin Anda tanyakan di kolom bidang. Nilai default parameter ini adalah 1, yang menunjukkan bahwa hanya nilai terbaru di kolom bidang yang ditanyakan.

Contoh

Dalam contoh-contoh berikut, tabel sampel sensor dibuat dengan mengeksekusi pernyataan berikut:

-- Buat tabel.
CREATE TABLE sensor (
    device_id VARCHAR TAG,
    region VARCHAR TAG,
    time   TIMESTAMP,
    temperature DOUBLE,
    humidity DOUBLE,
    PRIMARY KEY(device_id));

-- Masukkan data ke dalam tabel.
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

Nilai null dalam pernyataan di atas menunjukkan bahwa tidak ada data yang ditulis ke tabel pada titik waktu yang sesuai.

Tanyakan baris data terbaru

Tanyakan nilai suhu terbaru dari perangkat F07A1260 dan F07A1261.

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

Hasil berikut dikembalikan:

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

Tanyakan N baris data terbaru

Tanyakan dua nilai suhu terbaru dari perangkat F07A1260 dan F07A1261.

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

Hasil berikut dikembalikan:

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

Tanyakan nilai terbaru dalam beberapa kolom

Tanyakan nilai terbaru dari perangkat F07A1260 dalam beberapa kolom.

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

Hasil berikut dikembalikan:

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

Nilai terbaru dalam beberapa kolom mungkin berada di baris yang berbeda. Nilai lain dalam baris tersebut diisi dengan nilai null untuk penyelarasan.

Lakukan query bersarang

Gunakan klausa GROUP BY untuk menanyakan nilai maksimum dari dua nilai suhu terbaru perangkat F07A1260 dan F07A1261.

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;

Hasil berikut dikembalikan:

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

Lakukan query halaman

Tanyakan dua nilai suhu terbaru dari perangkat F07A1260 dan F07A1261, dan atur LIMIT dan OFFSET menjadi 1 untuk mengembalikan baris kedua data dalam hasil query.

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;

Hasil berikut dikembalikan:

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