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我如何分享數據集 –