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