2015-08-14 1 views
1

У меня есть такой запрос:не может использовать MIN, MAX и т.д. SQL Server 2012

select 
     FirstName, LastName, BirthDate, 
     GETDATE() AS [Today], 
     CAST (DATEDIFF (DD, BirthDate, GETDATE())/365.25 AS INT) AS [Age] 
FROM 
     Employees 
WHERE CAST (DATEDIFF (DD, BirthDate, GETDATE())/365.25 AS INT) >=55 
ORDER BY LastName ASC 

И я хочу, чтобы найти самый большой, самый маленький и средний возраст, и я думал, что я мог бы сделать это, но видимо, я не могу. Как это сделать?

select 
    FirstName, LastName, BirthDate, 
    GETDATE() AS [Today], 
    CAST (DATEDIFF (DD, BirthDate, GETDATE())/365.25 AS INT) AS [Age], 
    MIN (DATEDIFF (DD, BirthDate, GETDATE())/365.25 AS INT) 
FROM 
    Employees 
WHERE 
    CAST (DATEDIFF (DD, BirthDate, GETDATE())/365.25 AS INT) >=55 
ORDER BY 
    LastName ASC 

Ошибка:

Msg 195, Level 15, State 10, Line 5
'MIN' is not a recognized built-in function name.

+0

_ ", очевидно, я могу 't' _ вы получаете какие-либо сведения, например, об ошибке? –

+0

Да, сейчас он говорит: Msg 102, Level 15, State 1, Line 5 Неверный синтаксис рядом с 'MIN'. До этого не было функции MIN. – Newcomer

+0

Вам не хватает запятой после предыдущей строки – DavidG

ответ

0

Вот решение, которое я нашел. Спасибо всем за помощь!

выберите MAX (CAST (DATEDIFF (DD, BirthDate, GETDATE())/365,25 AS INT)) AS [Самый большой возраст] , MIN (CAST (DATEDIFF (DD, BirthDate, GETDATE())/365,25 AS INT)) AS [Наименьший Возрастные] , AVG (CAST (DATEDIFF (DD, BirthDate, GetDate())/365,25 AS INT)) AS [Средний возраст] ИЗ Сотрудники

0
select FirstName 
    , LastName 
    , BirthDate 
    , GETDATE() AS [Today] 
    , CAST (DATEDIFF (DD, BirthDate, GETDATE())/365.25 AS INT) AS [Age] 
    , MIN (CAST (DATEDIFF (DD, BirthDate, GETDATE())/365.25 AS INT)) 
FROM Employees 
GROUP BY FirstName 
    , LastName 
    , BirthDate 
    , CAST (DATEDIFF (DD, BirthDate, GETDATE())/365.25 AS INT) 
HAVING CAST (DATEDIFF (DD, BirthDate, GETDATE())/365.25 AS INT) >=55 
ORDER BY LastName ASC 
+0

Still ... Msg 195, Level 15, State 10, Line 6 «MIN» не является признанным встроенным именем функции. – Newcomer

+0

выполните «SELECT @@ VERSION» в вашей студии управления и покажите результаты здесь, пожалуйста. –

+0

Microsoft SQL Server 2012 - 11.0.2218.0 (X64) \t 12 июня 2012 13:05:25 \t Copyright (с) Microsoft Corporation \t Enterprise Edition (64-разрядная версия) на операционных системах Windows NT 6.1 (Build 7601: Service Pack 1) (Гипервизор) – Newcomer

0

Несколько правок в @MAli ответ. Вам не нужно GETDATE() в предложении GROUP BY, и группировка с тем же значением, которым вы получаете MIN, просто даст вам то же значение. Это должен быть ваш вопрос:

SELECT FirstName,LastName,BirthDate,Today,Age, 
     MIN(Age) OVER() 
FROM (
    select FirstName 
     , LastName 
     , BirthDate 
     , GETDATE() AS [Today] 
     , CAST (DATEDIFF (DD, BirthDate, GETDATE())/365.25 AS INT) AS [Age] 
    FROM Employees 
    GROUP BY FirstName 
     , LastName 
     , BirthDate 
    HAVING CAST (DATEDIFF (DD, BirthDate, GETDATE())/365.25 AS INT) >=55 
    ) AS A 
ORDER BY LastName ASC 
+0

sry, но по какой-то причине все тот же, нет min или max http://i.imgur.com/z44ejO2.png – Newcomer

+0

@PirreLeSang Да, это вероятно, потому, что люди с одинаковым днем ​​рождения, как правило, имеют одинаковый возраст. Я починил это. Попробуй это сейчас. –

+0

все еще ничего. Возможно, я не писал правильно, что мне нужно, потому что я немного нуб, так что позвольте мне перефразировать. Можно ли считать возраст таким же, как я, и после того, как я посчитал, что возраст показывает самый молодой и самый старый? Я думал, что, используя MIN, я могу вернуть самого молодого. – Newcomer