SQL查询-选择超过一定年龄的客户
我试图选择65岁以上、余额超过5000英镑的客户 我不知道如何在WHERE子句中成功计算他们的年龄 这是我的代码:SQL查询-选择超过一定年龄的客户,sql,oracle,Sql,Oracle,我试图选择65岁以上、余额超过5000英镑的客户 我不知道如何在WHERE子句中成功计算他们的年龄 这是我的代码: SELECT Customer.ID, Customer.lastName, Customer.firstName FROM CUSTOMER INNER JOIN has ON has.ID = CUSTOMER.ID INNER JOIN Account ON Account.ACCNUMBER = has.ACCNUMBER WHERE
SELECT
Customer.ID, Customer.lastName, Customer.firstName
FROM
CUSTOMER
INNER JOIN
has ON has.ID = CUSTOMER.ID
INNER JOIN
Account ON Account.ACCNUMBER = has.ACCNUMBER
WHERE
Account.BALANCE > 5000
AND ((DATEDIFF(DAY, CUSTOMER.DATEOFBIRTH, GETDATE()) / 365.25) > 65)
ORDER BY
CUSTOMER.LASTNAME;
我哪里做错了
谢谢你的帮助 如果您使用的是SQL Server数据库,则可以使用以下WHERE子句: 试试这个:
SELECT
Customer.ID, Customer.lastName, Customer.firstName
FROM
CUSTOMER
INNER JOIN
has ON has.ID = CUSTOMER.ID
INNER JOIN
Account ON Account.ACCNUMBER = has.ACCNUMBER
WHERE
Account.BALANCE > 5000
AND Customer.DateOfBirth <= DATEADD(YEAR, -65, SYSDATETIME())
ORDER BY
CUSTOMER.LASTNAME;
DATEADD从今天开始从当前系统日期减去65年,然后选择所有出生日期在截止日期之前的客户。年龄是最简单的部分,只需将65年添加到出生日期,然后检查它是否在过去。 您的查询具有可疑的内部联接。都是一对一吗?您可能知道它的详细信息,但至少我会将该部分作为exists查询编写:
SELECT ID, lastName, firstName
FROM CUSTOMER
WHERE DATEADD(YEAR, 65, DATEOFBIRTH) < getdate() AND
EXISTS ( SELECT *
FROM has
INNER JOIN Account ON Account.ACCNUMBER = has.ACCNUMBER
WHERE has.ID = CUSTOMER.ID AND
Account.BALANCE > 5000 )
ORDER BY LASTNAME;
哦,您使用的不是MS SQL server,而是Oracle,希望您在问题中指定:
SELECT ID, lastName, firstName
FROM CUSTOMER
WHERE ADD_MONTHS(DATEOFBIRTH, 65*12) < SYSDATE AND
EXISTS ( SELECT *
FROM has
INNER JOIN Account ON Account.ACCNUMBER = has.ACCNUMBER
WHERE has.ID = CUSTOMER.ID AND
Account.BALANCE > 5000 )
ORDER BY LASTNAME;
请标记使用的数据库管理系统。这里有一些特定于产品的SQL…用于Postgres:where ageCUSTOMER.DATEOFBIRTH>interval'65'year@a_horse_with_no_name,这就是为什么在我使用的数据库中我最喜欢postgreSQL的原因:其他数据库没有它那么先进。谢谢回复@marc_s!上面的代码给了我一个错误,上面写着DATED:invalid identifier。如果这有什么不同,我正在使用SQL Developer?谢谢@fabulaspb!上面的代码给了我以下错误-DATEDIFF:无效标识符。如果这有什么不同的话,我使用的是SQL Developer?您使用的是什么数据库?DateDiffyy。。。将忽略对合法退休制度可能很重要的月份。@fabulaspb这是我的课程tute的自定义月份-这就是它不起作用的原因吗?我是说datediffyy。。。甚至不能在MS SQL server上工作。它忽略了月、日部分,只对年部分进行计算。根据datediffyy的数据,2015年12月31日出生的人今天只有1岁。。。。如果这是一个医疗管理的计算,那么婴儿将面临严重的麻烦。谢谢@Cetin Basoz!对不起,我没意识到差别这么大。
SELECT ID, lastName, firstName
FROM CUSTOMER
WHERE ADD_MONTHS(DATEOFBIRTH, 65*12) < SYSDATE AND
EXISTS ( SELECT *
FROM has
INNER JOIN Account ON Account.ACCNUMBER = has.ACCNUMBER
WHERE has.ID = CUSTOMER.ID AND
Account.BALANCE > 5000 )
ORDER BY LASTNAME;