无法使用MIN,MAX等函数。SQL Server 2012

4

我有这样的查询:

 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

错误:

消息 195,级别 15,状态 10,行 5
'MIN' 不是已识别的内置函数名。


1
你有收到任何错误信息吗?貌似我做不到。 - Tim Schmelter
1
是的,现在显示:Msg 102,级别15,状态1,行5 'MIN'附近有语法错误。之前是说没有MIN函数。 - Newcomer
1
在上一行之后,您缺少了一个逗号。 - DavidG
1
我添加了一个逗号,现在的错误是:Msg 195,Level 15,State 10,Line 5,“MIN”不是已知的内置函数名称。 - Newcomer
1
有加星号的原因吗?请发布您正在运行的确切SQL语句... - Mark Sinkinson
显示剩余4条评论
3个回答

1

这是我找到的解决方案。感谢大家的帮助!

SELECT
       MAX (CAST (DATEDIFF (DD, BirthDate, GETDATE())/365.25 AS INT)) AS [The Biggest Age]
     , MIN (CAST (DATEDIFF (DD, BirthDate, GETDATE())/365.25 AS INT)) AS [The Smallest Age]
     , AVG (CAST (DATEDIFF (DD, BirthDate, GETDATE())/365.25 AS INT)) AS [The Average Age]
FROM
      Employees

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

@Sam,我应该复制和粘贴哪个答案?你能否为我写出正确的答案以便我运行? - Newcomer
现在我得到了这个错误信息: Msg 164,级别15,状态1,行12 每个GROUP BY表达式必须包含至少一个不是外部引用的列。 - Newcomer
@PirreLeSang 这可能是指 GETDATE()。你不能按 GETDATE() 进行分组。 - Sam Cohen-Devries
@PirreLeSang 不需要它。只需从此答案中复制并粘贴整个查询即可。它已经被编辑过了,因此 GETDATE() 已从 GROUP BY 子句中删除。 - Sam Cohen-Devries
@Sam cd 运行正常,但它没有显示最大值、最小值或平均年龄,它只是像这样复制了 Age 列 http://i.imgur.com/UglbPB2.png - Newcomer
显示剩余5条评论

0
@MAli的回答需要进行一些修改。在GROUP BY子句中不需要使用GETDATE(),而且按照获取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

抱歉,但出于某种原因仍然是相同的,没有最小值或最大值。http://i.imgur.com/z44ejO2.png - Newcomer
@PirreLeSang 是的,这可能是因为同一天生日的人通常年龄相同。我已经修复了它。现在再试一下。 - Sam Cohen-Devries
仍然没有任何结果。也许我没有写清楚我需要什么,因为我是个小白,所以让我重新表述一下。是否有可能像我所做的那样计算年龄,并在计算完年龄后显示最年轻和最年长的人?我认为使用MIN可以返回最年轻的人。 - Newcomer
太好了!非常感谢你,我不知道“编辑”是可点击的:D - Newcomer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接