You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Timestream是否有等效InfluxDB的last()函数获取列最后非空值

AWS Timestream有完全等效于InfluxDB的last()函数,同时还提供了功能更灵活的max_by()函数可以满足你取完整最新行的需求,两种都比你目前用的order by + limit方案成本低很多。

具体用法

  1. LAST()函数
    语法为LAST(待取值的列, 时间列),作用是返回分组内按时间列排序的最后一个非空的待取值列的内容,刚好匹配你需要的取最后一条非空记录的需求。
    针对你的场景,仅获取最新的Bewegung值可以直接用如下查询:
SELECT LAST(measure_value::boolean, time) AS "Bewegung" 
FROM $__database.$__table 
WHERE measure_name = 'inTrip' 
  AND measure_value::boolean = true 
  AND $__timeFilter

提示:如果不需要筛选值为true的记录,仅需要最后一个非空的记录,去掉WHERE子句中的measure_value::boolean = true条件即可。

  1. 需同时返回最新值对应的DevEUI、时间戳等完整行信息,可以用MAX_BY函数,该函数返回指定排序列最大的那一行的内容,写法如下:
SELECT MAX_BY((DevEUI, time, measure_value::boolean), time).* AS (DevEUI, time, "Bewegung")
FROM $__database.$__table 
WHERE measure_name = 'inTrip' 
  AND measure_value::boolean = true 
  AND $__timeFilter

成本优势说明

你目前用的order by time desc limit 1方案需要先扫描整个时间区间内所有符合条件的记录,再排序取第一条,时间区间越大扫描的字节数越多,计费越高。而LAST和MAX_BY都是Timestream内置的优化函数,底层存储是按时间分片存储的,这两个函数会直接定位到最新的符合条件的分片,不需要扫描整个时间区间的历史数据,扫描字节数基本不会随时间区间扩大而增长,能大幅降低查询成本。

如果需要按DevEUI等维度分组获取每个设备的最新状态,只需要加上GROUP BY DevEUI即可:

SELECT DevEUI, LAST(measure_value::boolean, time) AS "Bewegung" 
FROM $__database.$__table 
WHERE measure_name = 'inTrip' 
  AND $__timeFilter
GROUP BY DevEUI

内容的提问来源于stack exchange,提问作者Ew Na

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:54:05