2013-11-26 5 views
0

Я хочу найти значение MAX после вычитания столбца из другого столбца. То, что я в настоящее время, похоже, не работает синтаксически.Синтаксис SQL с MAX

SELECT 
    [EmpName] as 'Employee Name', 
    MAX([EndYear]-[BeginYear]) as 'Total Years' 
FROM 
    [dbo].[EMPLOYEE]; 
+0

Вы ищете имя сотрудника с наибольшим количеством лет? Или вы ищете общее количество лет для каждого сотрудника? – Twelfth

+0

Имя сотрудника с наибольшим количеством лет, а если есть несколько, я хочу всех. – cdalto

+0

MAX() является агрегированной функцией, поэтому вам нужна GROUP BY, если у вас более одного сотрудника. Однако я не уверен, почему вы используете MAX() в своем запросе выше ... – Sparky

ответ

0

Вы могли бы использовать что-то вдоль этих линий ...

;WITH emps AS (
    SELECT 
     [EmpName] AS 'EmployeeName', 
     [EndYear] - [Begin Year] AS 'TotalYears' 
    FROM  
     [dbo].[Employee] 
) 

SELECT * FROM emps WHERE TotalYears = (SELECT MAX(TotalYears) FROM emps) 
1

Используйте RANK заявление.

SELECT *, 
    RANK() OVER (PARTITION BY [Employee Name] ORDER BY [Total Years] DESC) AS Ranking 
FROM 
(
    SELECT EmpName AS 'Employee Name', EndYear - BeginYear AS 'Total Years' 
    FROM Employee 
) TotalYears 
WHERE Ranking = 1 

Имейте в виду, что я еще не тестировал вышеуказанный SQL, я просто написал его из памяти. Теперь я вернусь к базе данных, чтобы проверить синтаксис.

1

Максимальные операторы должны работать с совокупными данными, поэтому добавьте группу.

SELECT 
    [EmpName] as 'Employee Name', 
    MAX([EndYear]-[BeginYear]) as 'Total Years' 
FROM 
    [dbo].[EMPLOYEE] 
group by EmpName; 
Смежные вопросы