SQL IN PROGRESS
SELECT race_id, runner_id, end_time , end_lat, end_lng, (prev_lat-end_lng/prev_lng-runner_lng) as slope,
CASE WHEN slope > 0 THEN direction = 'POSITIVE'
WHEN slope < 0 THEN direction = 'NEGATIVE'
ELSE '0'
FROM race_info_table ri
LEFT JOIN
(SELECT TOP 1 runner_id, runner_lat AS prev_lat, runner_lng AS prev_lng, occurred_at_10s,
datediff(second, occurred_at_10s,ri.end_time) as last_location
FROM runner_location_table rl
ORDER BY datediff(second, occurred_at_10s,ri.end_time) ASC)
ON ri.runner_id == rl.runner_id
ПРОБЛЕМА С ВЫШЕУКАЗЫВАЕМОЙ QUERY - я специально не знаю, как присоединиться к данным информации о гонке с ближайшим временным временем. Вышеприведенный запрос не работает из-за несоответствия даты, потому что он не знает, что такое ri.end_time.
Вопрос: Как я могу определить, работает ли бегун в положительном или отрицательном направлении наклона?
Как ответить на этот вопрос:
ВХОДНЫЕ ДАННЫЕ
race_info_table
- start_lng DOUBLE
- start_lat DOUBLE
- end_lng DOUBLE
- end lat DOUBLE
- race_id BIGINT
- runner_id BIGINT
- end_time TIMESTAMP
- start_time TIMESTAMP
runner_location_table (recorded every 100 seconds)
- runner_id BIGINT, Unique identifier for a runner
- runner_lat DOUBLE, Latitude of runner location
- runner_lng DOUBLE, Longitude of runner location
- occurred_at_10s TIMESTAMP, UTC timestamp that increases in 100 second increments.
КОД ДЛЯ СОЗДАНИЯ ТАБЛИЦ
CREATE TABLE runner_locations_table (runner_id BIGINT,
runner_lat DOUBLE,
runner_lng DOUBLE,
occurred_at_10s TIMESTAMP);
CREATE TABLE race_info_table (runner_id BIGINT,
race_id BIGINT,
start_lat DOUBLE,
start_lng DOUBLE,
start_time TIMESTAMP,
end_lat DOUBLE,
end_lng DOUBLE,
end_time TIMESTAMP);
ЭТОТ ВОПРОС БЫЛ ОРИГИНАЛЬНО ПОДКЛЮЧЕН "sql-server". ЭТО ОТВЕТ ТОЛЬКО ДЛЯ СЕРВЕРА SQL.
Я думаю, вы просто хотите, чтобы outer apply
:
SELECT race_id, runner_id, end_time, end_lat, end_lng
FROM race_info_table ri OUTER APPY
(SELECT TOP 1 driver_id, driver_lat AS prev_lat, driver_lng AS prev_lng, occurred_at_10s,
datediff(second, occurred_at_10s,ri.end_time) as last_location
FROM runner_location_table rl
WHERE ri.runner_id = rl.runner_id
ORDER BY datediff(second, occurred_at_10s, ri.end_time) ASC
) rl;
LEFT JOIN
в коррелированном подзапросе. Похоже, это то, что вы пытаетесь сделать.