我有一个包含4列的表,latLng,dataTime,stage和index。我希望以结果为
的方式查询表不知道如何在sql语句中实现这一点,但是big query使事情变得更糟,不支持像distinct这样的coz语句。到目前为止我的选择只是为了实现列表中的前2个确实具有挑战性。
SELECT * FROM data.example
WHERE timeCollected IN
(SELECT max(timeCollected) FROM data.example GROUP BY latlng) order by col1,col2,col3
我能以何种方式实现这一目标,谢谢。
更新
使用此语句,我可以查询范围和指定时间内的数据。但是仍然无法选择具有最新latlng的重复行(如果多个行具有相同的latlng,则应该选择最近的行)。
SELECT *, ( 3959 * acos( cos( radians(12.18663) ) * cos( radians( lat ) ) * cos( radians( long) - radians(6.65604) ) + sin( radians(12.18663) ) * sin( radians( lat ) ) ) ) AS distance FROM data.example WHERE TIMESTAMP(timeCollected) <= DATE_ADD(USEC_TO_TIMESTAMP(NOW()), 60, 'minute') HAVING distance < 25 ORDER BY
distance ASC
答案 0 :(得分:0)
能够运行。不知道这个陈述有多高效,但现在是:
SELECT latlng, max(TIMESTAMP(timeCollected)) as timeCollected,first(sessionKey) as session,first(stage) as stage,first(index) as index,
( 3959 * acos( cos( radians(9.0071) ) * cos( radians( lat ) ) * cos( radians( long) - radians(7.56511) ) + sin( radians(9.0071) ) * sin( radians( lat ) ) ) ) AS distance
FROM opendata.openQueryData WHERE TIMESTAMP(timeCollected) > DATE_ADD(USEC_TO_TIMESTAMP(NOW()), -60, 'minute') GROUP BY latlng,distance HAVING distance < 25
order by session,stage,index ASC