Отфильтруйте отдельные записи и оставьте последнюю - PullRequest
1 голос
/ 17 апреля 2020

У меня есть база данных, которая содержит несколько различных значений, как показано ниже

id     firstName     lastName     someOption
1      mark          tom          28
2      jack          bob          75
3      mark          tom          48
4      mark          tom          87
5      sara          tim          64
6      jack          bob          23
7      katy          jimmy        65

Я хочу выбрать всю таблицу, но отфильтровать отдельные записи вместо последней, такой как

id     firstName     lastName     someOption
4      mark          tom          87
5      sara          tim          64
6      jack          bob          23
7      katy          jimmy        65

Как этого добиться с sql?

Ответы [ 2 ]

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

С НЕ СУЩЕСТВУЮЩИМ:

select t.* from tablename t
where not exists (
  select 1 from tablename
  where (firstName, lastName) = (t.firstName, t.lastName) and id > t.id
)  

См. Демоверсию . Результаты:

| id  | firstName | lastName | someOption |
| --- | --------- | -------- | ---------- |
| 4   | mark      | tom      | 87         |
| 5   | sara      | tim      | 64         |
| 6   | jack      | bob      | 23         |
| 7   | katy      | jimmy    | 65         |
1 голос
/ 17 апреля 2020

Один метод является коррелированным подзапросом:

select t.*
from t
where t.id = (select max(t2.id)
              from t t2
              where t2.firstname = t.firstname and t2.lastname = t.lastname
             );

С индексом (lastname, firstname, id) это, вероятно, самый быстрый метод для больших объемов данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...