2
我有一个包含4列latLng,dataTime,stage和index的表。我想查询表的方式,其结果必然是大查询中复杂的SQL选择语句
- 在一个时间范围
- 没有经纬度的重复,返回最近的latLng这是自然“纬度,经度”例如。 23.123,1344
- 按阶段排序然后索引。
- 在latLng的指定半径内。
不知道如何在sql语句中实现这个功能,但big query正在让事情变得更糟糕,因为不支持明确的语句。到目前为止,我的选择仅仅是为了获得名单上的前两名,这真的很具有挑战性。
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
你可以分享开放数据数据集吗?我会为你写查询,如果你做 –
你可以在https://bigquery.cloud.google.com上找到很多测试样本 –
@FelipeHoffa我如何分享数据集 –