强制使用子选择,返回最新的

问题描述 投票:1回答:1

这是一个新问题,但我总是在子查询上有一个块。我通常只使用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)
    ;

这是对的吗?

sql tsql
1个回答
1
投票

不,这不正确。您可以使用子查询,但这是一个更准确的方法:

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
© www.soinside.com 2019 - 2024. All rights reserved.