用于从一个表中获取少量内容的SQL查询
我有一张桌子的问题。这是表格的外观:用于从一个表中获取少量内容的SQL查询,sql,oracle,Sql,Oracle,我有一张桌子的问题。这是表格的外观: +----------+------------+-------------+------+ | index_id | version_id | date | type | +----------+------------+-------------+------+ | 1 | 4 | today | C | | 1 | 2 | last month | C
+----------+------------+-------------+------+
| index_id | version_id | date | type |
+----------+------------+-------------+------+
| 1 | 4 | today | C |
| 1 | 2 | last month | C |
| 1 | 4 | today | U |
| 2 | 3 | yesterday | c |
| 2 | 4 | today | C |
| 2 | 2 | last year | U |
| 3 | 7 | yesterday | C |
| 3 | 6 | last month | C |
| 3 | 8 | today | U |
+----------+------------+-------------+------+
我想要实现的是获得两种类型的max version和max date的索引(index_id)
像这样:
+----------+------------+-----------+------+
| index_id | version_id | date | type |
+----------+------------+-----------+------+
| 1 | 4 | today | C |
| 1 | 4 | today | U |
| 2 | 4 | today | C |
| 2 | 3 | yesterday | U |
| 3 | 7 | yesterday | C |
| 3 | 8 | today | U |
+----------+------------+-----------+------+
我想问你一些关于这个问题的想法。谢谢。我会选择
行号()
:
使用
行号
和分区
获取给定索引id和类型组合的每组最大值
select index_id,version_id,date,type from
(
select *, row_number() over (partition by index_id,type order by version_id,desc) as r_no
from table
) a
where a.r_no = 1
我会使用
子查询
:
select t.*
from table t
where version_id = (select max(t1.version_id)
from table t1
where t1.index_id = t.index_id and
t1.type = t.type
);
“最大版本和最大日期”这是什么意思?一个,另一个,两者的结合?你如何得到昨天的2 | 3 | U?它不在源代码中。昨天只有2 | 3 | c。今天不是一个日期,至少对于Oracle来说不是一个日期。你使用的是哪种Oracle版本?没有足够快的速度击败@Gordon Linoff来回答这个问题:(一旦你按
索引id
分区,你就不需要按索引id排序
。因为分区上的所有行都有相同的id
select t.*
from table t
where version_id = (select max(t1.version_id)
from table t1
where t1.index_id = t.index_id and
t1.type = t.type
);