QuestDB中LATEST_ON语法是什么?用法及适用场景说明
QuestDB
LATEST_ON 语法:用法与适用场景 基本定义
LATEST_ON是QuestDB专为时序数据优化的聚合函数,核心作用是基于指定时间列,获取该列最新时刻对应的目标列值。如果配合GROUP BY使用,则会返回每个分组内最新时间点的目标列值。
语法格式
LATEST_ON(time_column, target_column)
time_column:必须是TIMESTAMP类型的列,作为判断"最新"的时间基准target_column:需要获取对应值的列,支持数值、字符串等任意数据类型
实际示例
假设我们有一张物联网设备数据表sensor_data,结构及数据如下:
| device_id | timestamp | temperature | humidity |
|---|---|---|---|
| 1 | 2024-05-20 10:00:00 | 23.5 | 45 |
| 1 | 2024-05-20 10:05:00 | 23.7 | 44 |
| 2 | 2024-05-20 10:02:00 | 25.1 | 50 |
| 2 | 2024-05-20 10:06:00 | 25.3 | 49 |
示例1:获取全局最新传感器数据
SELECT LATEST_ON(timestamp, temperature) AS latest_global_temp, LATEST_ON(timestamp, humidity) AS latest_global_hum FROM sensor_data;
返回结果:
| latest_global_temp | latest_global_hum |
|---|---|
| 25.3 | 49 |
示例2:按设备分组获取各设备最新数据
SELECT device_id, LATEST_ON(timestamp, temperature) AS latest_temp, LATEST_ON(timestamp, humidity) AS latest_hum FROM sensor_data GROUP BY device_id;
返回结果:
| device_id | latest_temp | latest_hum |
|---|---|---|
| 1 | 23.7 | 44 |
| 2 | 25.3 | 49 |
适用场景
- 实时设备监控:快速获取物联网设备、服务器等的最新状态(如当前温度、CPU使用率),无需编写复杂的子查询或窗口函数,性能远优于传统的
ORDER BY timestamp DESC LIMIT 1或ROW_NUMBER()方案,因为QuestDB对时序存储做了原生优化。 - 仪表盘指标展示:用于展示多维度的最新业务指标,比如不同区域的实时销售额、不同门店的最新客流量,分组后用
LATEST_ON能高效聚合出结果。 - 时序数据快照获取:需要获取全量数据或特定分组的最新状态快照时,
LATEST_ON语法简洁,执行效率更高,尤其适合按时间分区的时序表(如PARTITION BY DAY),此时函数会优先扫描最新分区,进一步提升速度。
注意事项
- 如果同一时间点存在多条记录,
LATEST_ON会返回该时间戳下最后插入的那条记录对应的目标列值。 - 为了最大化性能,建议将表设置为按时间分区,且
time_column为表的时序主键(通过TIMESTAMP(timestamp)声明)。
内容的提问来源于stack exchange,提问作者Barry Allen
相关产品推荐
相关产品推荐

