Соединить запрос с условием по второй таблице - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть 2 таблицы: одна - пользователи, а вторая - местоположения, отношения один-ко-многим с пользователями. Я хочу перечислить всех пользователей на основе последнего местоположения с условием расстояния (км)> 0,01. Пожалуйста, кто-нибудь?

Я пытался. Синтаксическая ошибка (Запрос 1 ОШИБКА: неизвестный столбец 'd' в 'где предложение')

SELECT *, (SELECT distance 
           from locations 
           where locations.user_id = users.id 
           order by created_at DESC 
           LIMIT 1
          ) as d 
from users 
where d > 0.01

Редактировать

таблицы - пользователи - местоположения (несколько) (id, user_id, lat, lng, distance, creation_at)

Ожидаемый результат - список пользователей (не дублируется), где последние местоположения содержат расстояние меньше 0,1 (двойное расстояние)

Ответы [ 2 ]

1 голос
/ 12 апреля 2020

Производный столбец d недопустим в предложении WHERE, но вы можете использовать предложение HAVING:

having d > 0.01

Другой способ получить требуемые результаты, если вы можете не использовать оконные функции, это соединение вашей таблицы с запросом, который использует NOT EXISTS для возврата нужных вам мест:

select u.*, t.distance
from users u inner join ( 
  select l.* from locations l
  where not exists (select 1 from locations where user_id = l.user_id and created_at > l.created_at)
    and l.distance > 0.01 
) t on t.user_id = u.id
1 голос
/ 12 апреля 2020

Вы можете использовать оконную функцию:

select t.*
from (select u.*, l.*,
             row_number() over (partition by u.id order by l.created_at desc) as seq
      from users u inner join
           locations l
           on l.user_id = u.id
     ) t
where seq = 1 and distance > 0.01;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...