Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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 Oracle选择查询以筛选行_Sql_Oracle_Select_Oracle11g - Fatal编程技术网

Sql Oracle选择查询以筛选行

Sql Oracle选择查询以筛选行,sql,oracle,select,oracle11g,Sql,Oracle,Select,Oracle11g,假设我有一个具有以下值的表 id (PK) a_num a_code effect_dt expire_dt 32 1234 abcd 01/01/2015 05/30/2015 9 1234 abcd 06/01/2015 12/31/2015 5 1234 efgh 01/01/2015 05/30/2015 14 1234 efgh 06/01/2015 12/31/2015 如何从a_num,a_code对

假设我有一个具有以下值的表

id (PK) a_num  a_code effect_dt  expire_dt
32      1234   abcd   01/01/2015 05/30/2015
9       1234   abcd   06/01/2015 12/31/2015
5       1234   efgh   01/01/2015 05/30/2015
14      1234   efgh   06/01/2015 12/31/2015
如何从
a_num
a_code
对中仅选择一条记录。Id是1,3还是2,4?在某些情况下,
a_num
a_code
对可能有两条以上的记录


更新-ID不一定总是有序的,它只是一个主键。

一种方法是使用窗口功能:

SELECT id, a_num, a_code, effect_dt, expire_dt
FROM   (SELECT id, a_num, a_code, effect_dt, expire_dt,
               ROW_NUMBER() OVER (PARTITION BY a_num, a_code
                                  ORDER BY 1) AS rn
        FROM   mytable) t
WHERE  rn = 1

这将为您提供第1行和第3行

Select * from (
   Select * , Row_number() Over(Partition by a_num, a_code order by id) r_num from Your_Table ) result
Where r_num = 1
只需按顺序使用
DESC
,您将得到第2行和第4行

Select * from (
   Select * , Row_number() Over(Partition by a_num, a_code order by id desc) r_num from Your_Table ) result
Where r_num = 1

如果id不一定总是有序的呢?在这种情况下,您可以使用Effect_dt而不是id,这完全取决于您需要的顺序。您可以相应地更改列名。