选择和分组依据

达米安·科瓦列夫斯基(Damian Kowalewski)

我只想根据过滤表中的几列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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章