используя Row_number () и Partition, затем упорядочиваем desc и выбираем лучший результат в DB2 - PullRequest
0 голосов
/ 26 февраля 2019

у меня есть связанный сервер 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?

до применения лимита

после применения лимита, мне нужны и другие имена

1 Ответ

0 голосов
/ 26 февраля 2019

Запрос 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

Надеюсь, это поможет - из-за ограниченной информации о данныхэто только лучшая догадка

...