В BigQuery я пытаюсь написать запрос, который вычисляет расстояние между датой начала и датой окончания для каждого идентификатора. Меня не интересуют точки между этими диапазонами дат. Мне нужно только захватить lat/long даты начала и окончания и вычислить евклидово расстояние.
Таблица 1 выглядит следующим образом:
ID startdate enddate
A 2016-9-16 2016-10-9
A 2017-3-18 2017-4-9
Таблица 2 содержит координаты и выглядит следующим образом:
ID Date Latitude Longitude
A 2016-9-16 40.76 -109.33
A 2016-9-17 40.72 -109.33
A 2016-10-9 40.75 -109.33
A 2017-3-18 40.81 -109.33
A 2017-4-8 40.83 -109.33
A 2017-4-9 40.96 -109.32
Мои желаемые результаты будут выглядеть так:
ID t1.startdate t2.Latitude t2.Longitude t1.enddate t2.Latitude t2.Longitude distance
A 2017-3-18 40.81 -109.33 2017-4-9 40.96 -109.32 150
A 2016-9-16 40.76 -109.33 2016-10-9 40.75 -109.33 200
Это самое близкое, что я получил, но, поскольку может быть несколько идентификаторов, они не совпадают с правильными датами начала и окончания для каждого идентификатора:
SELECT
t1,t2,
ST_DISTANCE(Point1, Point2 ) as distance
from (
SELECT
ID,
st_geogpoint(Longitude,Latitude) as Point1
from `t2` AS t2 INNER JOIN
`t1` AS t1 ON t1.ID = t2.ID
WHERE t1.ID = t2.ID AND
t2.Date = t1.startdate ) t1,
(
SELECT
ID,
st_geogpoint(Longitude, Latitude) as Point2
from `t2` AS t2 INNER JOIN
`t1` AS t1 ON t1.ID = t2.ID
WHERE t1.ID = t2.ID AND
t2.Date = t1.enddate
) t2
WHERE t1.ID = t2.ID
Текущие результаты выглядят так:
ID t1.startdate t2.Latitude t2.Longitude t1.enddate t2.Latitude t2.Longitude distance
A 2016-9-16 40.76 -109.33 2016-10-9 40.75 -109.33 150
A 2016-9-16 40.76 -109.33 2017-4-9 40.96 -109.32 250
A 2017-3-18 40.81 -109.33 2017-4-9 40.96 -109.32 200
A 2017-3-18 40.81 -109.33 2016-10-9 40.75 -109.33 250