sql - 在 Oracle SQL 中查找列的最大值

标签 sql oracle aggregate-functions

我有以下表结构:

Table A (A1, ...) where A1 is PK

Table B (B1, B2, ...) where A.A1 = B.B1 and B2 is PK 

Table C (C1, C2, C3, ...) where C.C1 = B.B2 and C1 is PK

鉴于提供了A.A1和C.C2,我需要获取C3的MAX()。以下显然不起作用:

select c.c3
from A a join B b on a.A1 = b.B1
         join C c on b.B2 = c.C1
where a.A1 = '123'
  and c.C2 = to_date('01-01-2000', 'mm-dd-yyyy')
  and c.C3 = (
    select max(c3)
    from C
    where c1 = c.C1)

查询没有返回任何内容。但是,当我尝试时:

select max(c.c3)
from A a join B b on a.A1 = b.B1
         join C c on b.B2 = c.C1
group by a.A1, c.C2
having a.A1 = '123'
  and c.C2 = to_date('01-01-2000', 'mm-dd-yyyy')

看起来它返回了正确的值,但速度很慢。有没有办法让它与第一个查询一起工作(无分区)?

最佳答案

您可以尝试WITH子句。

您的查询可能是这样的:

;WITH C AS(
    select c.c3
    from A a join B b on a.A1 = b.B1
             join C c on b.B2 = c.C1
    where a.A1 = '123'
      and c.C2 = to_date('01-01-2000', 'mm-dd-yyyy')
)
SELECT MAX(C3) FROM C

或者简单地说,

select max(cs)
from (
    select c.c3 as cs
    from A a join B b on a.A1 = b.B1
             join C c on b.B2 = c.C1
    where a.A1 = '123'
      and c.C2 = to_date('01-01-2000', 'mm-dd-yyyy')
)

关于sql - 在 Oracle SQL 中查找列的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29724564/

相关文章:

java - Spring Batch 2.2.7 应用程序抛出 "Invalid column name"。非常简单的代码炸弹

mysql - 选择每组的最后一个寄存器

mysql - SQL Date between 和另一个条件语句不起作用

Python cx_Oracle 使用executemany() 加载CSV 给出 "Required argument ' 参数'(pos 2)未找到”

sql - 如何使用窗口函数获取最高价格及其 ID?

arrays - 展平/连接聚合 JSONB 数组

php - 当我尝试从 RedBeanPHP 中通过 R::exec 执行查询时,为什么会出现错误?

sql - 检查十个字段中的任意两个是否不同(不是 NULL 或相等)

mysql - SQL查询/查找基于排名的百分位数

PostgreSQL - 条件聚合 - Select 语句中的 Avg()