SELECT
D.DOG_ID, D.DOG_NAME, S.STORE_AREA, MAX(DURATION)
FROM
(SELECT
D.DOG_ID, D.DOG_NAME, S.STORE_AREA, SHD.START_TIME-END_TIME DURATION
FROM
SERVICE_HISTORY_DETAIL SHD, STORES S, DOGS D, SERVICE_HISTORY SH
WHERE
D.DOG_ID = SH.DOG_ID
AND S.STORE_ID = SH.STORE_ID
AND SH.SERVICE_ID = SHD.SERVICE_ID);
第1行的错误:
ORA-00904:“S”。“STORE_AREA”:标识符无效
我分别在括号和max函数中运行查询,它运行良好,但如果我在第一行添加SELECT D.DOG_ID,D.DOG_NAME,S.STORE_AREA,则显示错误,我不知道是什么错了。
由于
答案 0 :(得分:0)
您的查询提供错误ORA-00904: "S"."STORE_AREA": invalid identifier
,因为表别名S
是在子查询中定义的,而不是在外部查询中定义的。
如果删除别名,则会收到错误ORA-00937: not a single-group group function
,因为您有一个聚合函数和几个未聚合的列,但您没有相应的GROUP BY
子句。
一种解决方案是不使用聚合函数,而是在子查询中对结果进行排序,然后得到第一个(最大)结果:
SELECT *
FROM (
SELECT D.DOG_ID,
D.DOG_NAME,
S.STORE_AREA,
SHD.START_TIME-END_TIME DURATION
FROM SERVICE_HISTORY_DETAIL SHD
INNER JOIN SERVICE_HISTORY SH
ON ( SH.SERVICE_ID = SHD.SERVICE_ID )
INNER JOIN STORES S
ON ( S.STORE_ID = SH.STORE_ID )
INNER JOIN DOGS D
ON ( D.DOG_ID = SH.DOG_ID)
ORDER BY DURATION DESC
)
WHERE ROWNUM = 1;
答案 1 :(得分:0)
如果你想要别名
SELECT
A.DOG_ID, A.DOG_NAME, A.STORE_AREA, MAX(A.DURATION)
FROM
(SELECT
D.DOG_ID, D.DOG_NAME, S.STORE_AREA, SHD.START_TIME-END_TIME DURATION
FROM
SERVICE_HISTORY_DETAIL SHD, STORES S, DOGS D, SERVICE_HISTORY SH
WHERE
D.DOG_ID = SH.DOG_ID
AND S.STORE_ID = SH.STORE_ID
AND SH.SERVICE_ID = SHD.SERVICE_ID) A group by A.DOG_ID, A.DOG_NAME, A.STORE_AREA ;