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,这完全取决于您需要的顺序。您可以相应地更改列名。