select 具有聚合的多列

select multiple columns with aggregations

我有一个带有一些字段(时间、文本、类型)的 table。我想为每种类型的 return 构建一个查询,该查询使用最大值时间引入的文本。 Oracle 有一些限制,如果没有一些技巧,构建查询并不简单。

我正在努力获得正确的查询,任何人都可以帮助我吗?

TIME TEXT TYPE
--------------------------
03.05.2020 AA 2
02.04.2020 BB 2
01.04.2020 CC 1

我想要一个 returns

的查询
03.05.2020 AA 2
01.04.2020 CC 1

首先是获取每个 typemax(TIME),然后将其加入您的 tableA 以获取其他字段 (TEXT)

select * from tableA t
inner join 
     (select max(TIME) mt, type from tableA group by type) t1 on t1.mt=t.mt and t.type= t1.type

您可以使用row_number(或dense_rank):

select
    t.*
from (
    select
        t.*,
        row_number() over(partition by type_column order by time_column desc) rn
    from tbl t
) t
where t.rn = 1

一个选项是使用 DENSE_RANK, FIRST and LAST Analytic Functions 作为

MAX(time) KEEP (DENSE_RANK LAST ORDER BY time ) OVER( PARTITION BY type )

WITH t2 AS
(
SELECT t.*, MAX(time) KEEP (DENSE_RANK LAST ORDER BY time ) OVER( PARTITION BY type ) 
            AS highest
  FROM t
)
SELECT time, text, type
  FROM t2
 WHERE highest = time   

通过此方法列出了所有关系(每个 type 组的 time 的重复值)。

Demo