Sql 关于最大查询的最长时间
第1行错误: ORA-00904:“S”“存储区”:无效标识符 我分别在括号和max函数中运行查询,效果很好,但是如果我在第一行添加SELECT D.DOG\u ID、D.DOG\u NAME、S.STORE\u区域,它会显示错误,我不知道这有什么问题Sql 关于最大查询的最长时间,sql,oracle,top-n,Sql,Oracle,Top N,第1行错误: ORA-00904:“S”“存储区”:无效标识符 我分别在括号和max函数中运行查询,效果很好,但是如果我在第一行添加SELECT D.DOG\u ID、D.DOG\u NAME、S.STORE\u区域,它会显示错误,我不知道这有什么问题 谢谢您的查询给出了错误ORA-00904:“S”。“存储区”:无效标识符,因为表别名S在子查询中定义,而不是在外部查询中定义 如果删除别名,则会出现错误ORA-00937:没有单个组函数,因为您有一个聚合函数和多个未聚合的列,但没有相应的grou
谢谢您的查询给出了错误
ORA-00904:“S”。“存储区”:无效标识符
,因为表别名S
在子查询中定义,而不是在外部查询中定义
如果删除别名,则会出现错误ORA-00937:没有单个组函数
,因为您有一个聚合函数和多个未聚合的列,但没有相应的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;
虽然oracle拥有MySQL,但它们仍然是不同的产品在ANSI-92 SQL标准(25年前)中,用正确的ANSI
JOIN
语法替换了老式的逗号分隔表列表样式它的使用是不鼓励这个家庭作业的吗?@Shadow Oracle也拥有Java…但是他们不能对它做太多的干扰,因为它在开源中如此广泛。这将提供一个ORA-00937:没有一个单独的组函数
。这将不会找到具有最长持续时间的单一狗约会,相反,它将找到最长持续时间对于每个商店区域的每只狗。@MT0也许你是对的,但我的答案是解决op的错误。我想这是他的问题。@Moudiz为什么我最终需要一个分组依据……是吗?@Yvonne因为你有max()
你需要添加group by
来使用max()函数,或者你有一个上面提到的MT0错误是的,它有效,它给了我一个时间,但我查看了所有的数据,有一些持续时间比给定的时间长,你知道为什么吗?为什么我们需要where条件呢?@Yvonne请提供一些示例数据(例如,将您的DDL/DML语句放入一个或另一个类似的网站)来说明问题。我猜不出是什么原因导致了这个问题。至于为什么WHERE
子句-您需要最大值,因此这将其限制为单个(第一)行,子查询中的ORDER BY
子句将最大持续时间行放在第一位,因此这将是唯一返回的行。尝试删除WHERE
子句,您应该会看到它以持续时间降序返回所有行。注意:我的代码片段是在它们编辑出某些相关上下文之前的答案。
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;
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 ;