Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于从一个表中获取少量内容的SQL查询_Sql_Oracle - Fatal编程技术网

用于从一个表中获取少量内容的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 
                   );