2014-10-15 2 views
0

Я пытаюсь выбрать имя сотрудника, который имеет самый ранний SDate. Я пробовал следующее:Как запросить минимальное условие?

SELECT [name] 
      FROM [employee] 
      where [dept] in ('Finance', 'HR', 'IT') 
      and [SDate] = min([SDate]); 

Я был выброшен с ошибкой. Не удивительно, так как у меня была функция агрегации в предложении where. Итак, я изменил его на это:

SELECT [name] 
      FROM [employee] 
      where [dept] in ('Finance', 'HR', 'IT') 
      group by [name] 
      having [SDate] = min([SDate]); 

Но он все еще не работает. Как я должен построить свой T-SQL, чтобы получить имя сотрудника, у которого есть минимальный SDate?

ответ

2
DECLARE @minDate Date 
SELECT 
    @mindate=MIN(sDate) 
FROM 
    employee E 
WHERE 
    [dept] IN ('Finance', 'HR', 'IT'); 

SELECT 
    [name] 
FROM 
    [employee] 
WHERE 
    [dept] IN ('Finance', 'HR', 'IT') 
    and [sDate] = @minDate; 
2

Использование order by и top:

SELECT top 1 [name] 
FROM [employee] 
WHERE [dept] in ('Finance', 'HR', 'IT') 
ORDER BY sdate desc; 
Смежные вопросы