【发布时间】:2021-06-27 12:59:22
【问题描述】:
我正在尝试在我的数据库中查找最老的客户。我只想要他们的全名和年龄,但我目前的结果是输出所有客户和他们的年龄(不仅仅是最老的)。我在这里做错了什么?
SELECT
LTRIM(CONCAT(' ' + Prefix, ' ' + FirstName,
' ' + MiddleName, ' ' + LastName, ', ' + Suffix)),
MAX(DATEDIFF(year, BirthDate, GETDATE()))
FROM
Customers
WHERE
BirthDate is not null
GROUP BY
Prefix, FirstName, MiddleName, LastName, Suffix
ORDER BY
MAX(DATEDIFF(year, e.BirthDate, GETDATE())) desc
请注意,似乎有多个客户的最大年龄相同。
【问题讨论】:
-
能否提供样本数据和所需结果。我猜,GROUP BY 应该看起来像 GROUP BY LTRIM(CONCAT(' ' + Prefix, ' ' + FirstName, ' ' + MiddleName, ' ' + LastName, ', ' + Suffix))
-
考虑使用
TOP(n)或TOP(n) PERCENT来限制您的结果集。 docs -
谷歌有条款。
-
定义“最年长的” - 除非您有多个具有相同出生日期的人,否则只会有一个人。您只是想按年龄顺序列出前几名吗?
-
如果您想将结果限制在某个条件下,那么您还需要提供该条件。您查询中的唯一条件是生日不能为空。
标签: sql sql-server max aggregate-functions