SQL: Как выбрать запись, в которой значение является самым низким на уникальный идентификатор - PullRequest
0 голосов
/ 12 ноября 2018

Я новичок в SQL и уже несколько дней пытаюсь найти ответ на этот вопрос, но не могу найти однозначного ответа.(Или я не понимаю предложенные решения, так как они не соответствуют моему сценарию)

У меня есть таблица, похожая на приведенную ниже:

unique reference|tel number| tel priority
123|0123456910|2
123|0654321910|6
214|0056897910|4

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

unique reference|tel number| tel priority
123|0123456910|2
214|0056897910|4

Любые указатели / указания приветствуются, я пробовал функции MIN (), но не смогчтобы заставить это сделать это как вывод, так что я думаю, что мне чего-то не хватает.

(У меня SQL Server 2008 r2 или построитель отчетов Microsoft)

Ответы [ 3 ]

0 голосов
/ 12 ноября 2018

Это дает желаемый результат:

SELECT * FROM phones WHERE tel_priority = (SELECT MIN(tel_priority) FROM phones p WHERE p.unique_reference = phones.unique_reference)

при условии phones - это имя таблицы.
Конечно, если существует более 1 строки, содержащей наименьшее значение tel_priority для данного unique_reference, то будут извлечены все эти строки.

0 голосов
/ 12 ноября 2018

Вот простое решение.Я проверил, и он работает нормально. Если вам нравится ответ, пожалуйста, проголосуйте

 select * from tablename where tel_priority not in(select max(tel_priority) from tablename)
0 голосов
/ 12 ноября 2018

Вы можете использовать row_number():

select t.*
from (select t.*, 
             row_number() over (partition by uniquereference order by priority) as seq
      from table t
     )
where seq = 1;

Если у priority есть связи, используйте dense_rank() вместо row_number().

...