使用Row_number()和Partition,然后对desc进行排序,然后在DB2中选择最佳结果

时间:2019-02-26 18:39:53

标签: sql-server select db2 partition row-number

我有一个db2链接服务器,我正在通过SQL Server运行查询。

select *
from openquery (DO,'
select distinct HOUSE_NUM, NAME, DOB, AGE, row_number()
    over(partition by DOB) rownum
from schema.INFO
where HOUSE_NUM = ''332''
group by HOUSE_NUM, NAME, DOB, AGE
order by NAME, rownum desc
limit 1
with ur');

该表具有历史记录,因此每个人的年龄都有一行。我想为每个分区选择编号最高的行,因为这将给我他们当前的年龄,但是,当我将限制1选择最高的结果时,我只会得到1行,而忽略所有其他人。问题是有多个人住在一所房子里,我需要他们所有的年龄,而不仅仅是其中一个。如何选择db2中每个分区的最佳结果?

before applying limit

after applying limit, i need the other names too

1 个答案:

答案 0 :(得分:0)

Db2查询看起来像这样-无法在同一查询部分中引用行号,这就是为什么我使用CTE

with temp as (
select distinct HOUSE_NUM, NAME, DOB, AGE
     , row_number() over(partition by HOUSE_NUM, NAME, DOB order by age desc) as rownum
  from schema.INFO
 where HOUSE_NUM = '332'
) 
select * 
  from temp 
 where rownum = 1

希望这会有所帮助-由于有关数据的信息有限,这只是一个最佳猜测