2010-11-03 2 views
3

Я хочу получить employee numbers и start dates всех сотрудников с start dates, равным самой ранней дате.Как сформулировать этот SQL-запрос?

Я знаю, что это неправильно. Но просто писать, чтобы показать, что я хочу.

SELECT  start_date, employee_no 
FROM   [employees] 
WHERE  (start_date = MIN(start_date)) 

ответ

7

Вы были близки!

SELECT  start_date, employee_no 
FROM   [employees] 
WHERE  start_date = (SELECT MIN(start_date) FROM employees) 
+3

вы печатаете только что намного быстрее, все твое – DevelopingChris

+1

@DevelopingChris - я просто скопировать и вставить его и сделал это правильно! :) – JNK

+1

, должно быть, 5 из нас печатали его, когда вы отправляли сообщения. – DevelopingChris

0

Это будет делать это:

SELECT  start_date, employee_no 
FROM   [employees] 
WHERE  start_date = (select MIN(start_date) from [employees]) 
0
SELECT start_date, employee_no 
FROM  [employees] 
WHERE  start_date = (SELECT MIN(start_date) FROM [employees]) 
3

Я хотел бы использовать общее табличное выражение (CTE), чтобы сделать это. Это похоже на создание временной таблицы.

;with EmpInfo as 
(
    SELECT start_date, employee_no, MIN(start_date) OVER() as MinStartDate 
    FROM [employees] 
) 
SELECT start_date, employee_no FROM EmpInfo WHERE start_date = MinStartDate 

Вот веб-страницу Microsoft о Using Common Table Expressions

+2

+1 для чего-то другого, чем все остальные! :) – FrustratedWithFormsDesigner

+0

Производительность немного лучше, а также в соответствии с Планом выполнения. У нас очень похожая таблица данных сотрудников, поэтому я смог легко сравнивать планы. :) –

Смежные вопросы