我只想根据过滤表中的几列MAX(ts)
。ts = timestamp
。如果我只选择两列-deviceid和ts,一切正常。
SELECT deviceid, MAX(ts)
FROM device_data
GROUP BY deviceid
结果:
但我还需要两列-经度和纬度。如果我选择经度和纬度,就会遇到问题,因为它们必须出现在GROUP BY中,并且使用相同的deviceid会得到太多结果:
如何避免在GROUP BY中插入经度和纬度?
有几种解决方案。一种是使用窗口函数按降序对同一deviceid分区中的第一个经度,纬度等进行获取。
然后,您将获得重复项,可以使用distinct
以下命令将其删除:
SELECT DISTINCT deviceid,
FIRST_VALUE(longitude) OVER win AS longitude,
FIRST_VALUE(latitude) OVER win AS latitute,
FIRST_VALUE(ts) OVER win AS ts
FROM device_data
WINDOW win AS (PARTITION BY deviceid ORDER BY ts DESC);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句