2016-03-18 4 views
1

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

Таблица - Tasks

| ResourceID | Name | T_SEQ | 
| 1  | Res1 | 90 | 
| 1  | Res1 | 91 | 
| 2  | Res2 | 92 | 

Я бегу следующее:

select ResourceID, COUNT(ResourceID) 
from Tasks 
group by ResourceID 

Это показывает мне, что res1 имеет счетчик 2 и Res2 имеет значение 1.

Теперь я хочу получить минимум, поэтому в этом case Мне нужно получить ResourceID 2, потому что у него только 1 работа, но я не уверен, как это сделать?

Спасибо всем, кто может помочь.

+0

Добавьте еще несколько строк данных выборки, а также добавьте новый ожидаемый результат. – jarlh

+0

Что произойдет, если у вас есть два с одинаковым счетом? – tobypls

ответ

3

Один метод order by и top:

select top 1 ResourceID, COUNT(ResourceID) 
from Tasks 
group by ResourceID 
order by COUNT(ResourceID); 
+0

Одно сомнение: если более 1 ResourceId имеет одинаковый минимальный счет, тогда этот запрос приведет только к одному. – Wanderer

+0

Отлично, без проблем, если ResourceId имеет одинаковое количество минут, мне просто нужно выбрать первый/любой. – user3739958

0

Вы можете решить это с помощью КТР. Это даст вам все строки с минимальным количеством:

; WITH occurrences AS 
(
    select ResourceID, COUNT(ResourceID) AS Counts 
    from Tasks 
    group by ResourceID 
) 
, min_occurrences AS 
(
    SELECT MIN(Counts) AS min_counts FROM occurrences 
) 
SELECT ResourceID FROM occurrences a 
INNER JOIN min_occurrences b ON a.Counts = b.min_counts 
Смежные вопросы