这是一个新问题,但我总是在子查询上有一个块。我通常只使用CTE,但这个问题是我几天前做的测试,我被要求使用一个子选择。
表称为CALL_DETAILS列:
PHONE_NBR (Phone number)
CUSTOMER (name)
CALL_TYPE (cell or land)
CALL_TIME (date and time of call)
DURATION (number of minutes)
COST (monetary)
测试问题:“现在您可以找到每个客户和每个CALL_TYPE的记录,其中包含最新的CALL_TIME如何从CALL_DETAILS表中返回这些行的所有信息?是的,我们正在寻找您使用嵌套的SELECT在这个答案中(子选择)。“
我写了以下内容,但从那以后我一直在猜测自己。
SELECT
PHONE_NBR
,CUSTOMER
,CALL_TYPE
,CALL_TIME
,DURATION
,COST
FROM CALL_DETAILS CD
WHERE CALL_TIME IN
(SELECT MAX(CALL_TIME)
FROM CALL_DETAILS CDS
GROUP BY CUSTOMER, CALL_TIME)
;
这是对的吗?
不,这不正确。您可以使用子查询,但这是一个更准确的方法:
WHERE CALL_TIME = (SELECT MAX(CD2.CALL_TIME)
FROM CALL_DETAILS CD2
WHERE CD2.CUSTOMER = CD.CUSTOMER
)
你的版本有很多问题。
MAX_CALL_TIME
不存在。因此,MAX()
函数存在语法错误。CALL_TIME
聚合,因此每个通话时间都在该集合中。IN
,所以每条记录都会匹配一个通话时间 - 好吧,至少每一个都不是NULL
。