получение первых строк из дубликатов в зависимости от одного столбца MariaDB - PullRequest
1 голос
/ 04 марта 2020

Я использую MariaDB версии 10.2.21

Есть несколько строк с повторяющимся идентификатором user_id (один из столбцов).

Я хочу получить первое вхождение каждого user_id, а не только user_id но все строки, которые связаны с первым появлением user_id.

select 
  distinct user_id,
from 
  user_table
where 
  user_id in (a,b,c,d,e,f,....) and 
  date = '2020-02-25';

, это правильно дает мне все различное, теперь, когда я пытаюсь добавить связанные столбцы

EXPLAIN
select 
  distinct user_id,
  ST_X(location) as lng
from 
  user_table
where 
  user_id in (a,b,c,d,e,f,....) and 
  date = '2020-02-25';

, это говорит мне, что я получит более 2 миллионов строк ... У меня только 3000 уникальных user_id. Я хочу получить только первый встречающийся user_id со связанным с ним местоположением.

Поскольку моя база данных очень большая, мне нужно использовать все преимущества индексов, иначе сломается.

мой индекс - [user_id, date], где user_id - 1-й индекс, а date - 2-й индекс.

Итак, мой вопрос заключается в том, как получить уникальную (первая встречающаяся = самая верхняя строка) информацию о пользователях с помощью индексов, поэтому моя БД не ломается?

, поэтому, если есть

  user_id   location
    1       (123.22, 22.33)
    1       (111.22, 22.12)
    2       (155.33, 41.23)
    2       (160.41, 12.31)

Я бы получил

user_id   location
   1       (123.22, 22.33)
   2       (155.33, 41.23)

1 Ответ

0 голосов
/ 04 марта 2020

Используйте агрегацию, если у вас только одно местоположение:

select user_id, ST_X(min(location)) as lng
from user_table
where user_id in (a,b,c,d,e,f,....) and 
      date = '2020-02-25'
group by user_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...