SQL查询最年长者

SQL Query to Obtain the Oldest People

我试图在我的数据库中找到最老的客户。我只想要他们的全名和年龄,但我目前的结果是输出所有客户和他们的年龄(不仅仅是最老的)。我在这里做错了什么?

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

请注意,似乎有多个年龄最大的顾客。

您还没有定义“最老的客户”是什么意思。
所以我会给出一些你可以尝试的选项

要查看最老的客户列表,请使用像这样的简单查询

SELECT FirstName, LastName, Suffix, BirthDate
FROM   Customers
WHERE  BirthDate is not null
ORDER BY BirthDate desc

要将结果限制为多行,例如最旧的 10 行,请使用 top 10

SELECT top 10
       FirstName, LastName, Suffix, BirthDate
FROM   Customers
WHERE  BirthDate is not null
ORDER BY BirthDate desc

要将结果限制为特定日期之后出生的所有客户,请添加到 where 子句

SELECT FirstName, LastName, Suffix, BirthDate
FROM   Customers
WHERE  BirthDate is not null
and    BirtDate < '19920101'
ORDER BY BirthDate desc

在执行任何其他操作之前,您需要做的第一件事是在 Customers table.

上定义一个唯一的数字主键
ALTER TABLE Customers ADD Cust_Id int IDENTITY(1,1);
ALTER TABLE Customers ADD CONSTRAINT PK_Customers PRIMARY KEY (Cust_Id);

完成后,以下代码将为您提供“数据库中最老的客户”。

With qry1 As (
    SELECT      Cust_Id, 
                DATEDIFF(year, BirthDate, GETDATE()) As Age
    FROM        Customers 
    WHERE       BirthDate is not null 
),
qry2 As (
    SELECT      Max(Age) As Max_Age
    FROM        qry1
)
SELECT      Customers.Cust_Id,
            Customers.Prefix,
            Customers.FirstName,
            Customers.MiddleName,
            Customers.LastName,
            Customers.Suffix,
            Qry1.Age
FROM        Customers
Inner Join  Qry1 On Customers.Cust_Id = Qry1.Cust_Id
Inner Join  Qry2 On Qry1.Age = Qry2.Max_Age