【问题标题】:using Row_number() and Partition, then ordering desc, and selecting top result in DB2使用 Row_number() 和 Partition,然后排序 desc,并在 DB2 中选择顶部结果
【发布时间】:2019-02-26 18:39:52
【问题描述】:

我有一个 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 中选择每个分区的顶部结果?

在应用限制之前

应用限制后,我也需要其他名称

【问题讨论】:

  • 请提供一些表格schema.INFO 示例数据,而不是您查询的结果,以及预期的结果。您对查询的用途和原因还不够清楚...

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-11-20
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多