Выберите самый высокий идентификатор, указанный в списке - PullRequest
0 голосов
/ 24 марта 2020

У меня есть список нескольких идентификаторов (например, (5,8,9)).

Я бы хотел найти в таблице самые высокие данные с идентификаторами в списке.

ех. В таблице ma у меня есть несколько записей с самым высоким идентификатором 8 (9 не существует в этой таблице). Поэтому необходимо вернуть все записи, где id_link = 8.

список идентификаторов явно динамический c.

Как мне сделать этот запрос?


Другое, например:

Моя таблица:

id | id_link | name

1  |    5    | name_1
2  |    8    | name_2
3  |    8    | name_3
4  |    8    | name_4

По моей просьбе я хотел бы привести этот список идентификаторов: (5,8,9).

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

В этом случае все строки с id_link = 8

Ответы [ 2 ]

2 голосов
/ 25 марта 2020

Этот запрос:

select max(id_link) from tablename
where id_link in (5, 8, 9)

возвращает максимум id_links в списке, который существует в вашей таблице. Так что используйте это так:

select *
from tablename
where id_link = (
  select max(id_link) from tablename
  where id_link in (5, 8, 9)
)

См. демо . Результаты:

| id  | id_link | name   |
| --- | ------- | ------ |
| 2   | 8       | name_2 |
| 3   | 8       | name_3 |
| 4   | 8       | name_4 |
0 голосов
/ 25 марта 2020

Вы можете искать ваши три значения, и они могут совпадать или не совпадать ни с одной строкой. Как вы сказали, нет строки с идентификатором 23, так что ничего не вернется. Но вы все равно можете включить это значение в поиск.

Затем верните MAX (id) из найденных значений.

SELECT MAX(id) FROM MyTable WHERE id IN (8, 12, 23);

Если вы хотите целую строку, а не только Макс (id) вы можете сделать это:

SELECT id, ... FROM MyTable WHERE id IN (8, 12, 23)
ORDER BY id DESC LIMIT 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...