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
首先是获取每个 type
的 max(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
的重复值)。
我有一个带有一些字段(时间、文本、类型)的 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
首先是获取每个 type
的 max(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
的重复值)。