DB2 Query - исключить максимальные значения - PullRequest
2 голосов
/ 23 января 2012

У меня есть следующая проблема (упрощенно):

У меня есть таблица с животными, например:

ID       Type      Birthday
1        Dog       1.1.2011  
2        Cat       2.1.2009
3        Horse     5.1.2009
4        Cat       10.6.1999
5        Horse     9.3.2006

Я знаю, что все животные принадлежат к одной "семье".Из каждой семьи я теперь хочу видеть всех потомков, но я не хочу видеть запись для «основателя семьи».

Так что для простого примера выше я просто хочу увидеть это:

ID       Type      Birthday
2        Cat       2.1.2009
3        Horse     5.1.2009

До сих пор я не смог найти способ сгруппировать записи и затем удалить первую запись из каждой группы.Мне удалось найти только способ удаления определенных строк.

Возможно ли даже решить эту проблему?

Большое спасибо за помощь.Это высоко ценится.

Ответы [ 3 ]

3 голосов
/ 23 января 2012

Простой SQL (необязательно эффективный может быть:)

select
  id, type, birthday
from animals
  left join
  (select type, min(birthday) min_birthday
  from animals
  group by type) a 
     on a.type=animals.type and a.min_birthday = animals.birthday
where a.type is null;

Для максимальной эффективности вы можете использовать аналитическую функцию:

select id, type, birthday
from(
    select
      id, 
      type, 
      birthday, 
      row_number() over (partition by type order by birthday) as rnk
    from animals
) a
where rnk >=2

.можете прочитать это статья

1 голос
/ 23 января 2012

Вариант exists:

select id, type, birthday
from animals a
where exists (select null from animals e
              where e.type = a.type and e.birthday < a.birthday)

(отредактировано, следующие комментарии.)

1 голос
/ 23 января 2012

В SQL Server вы можете сделать:

select
  id, type, birthday
from (
    select
      id, type, birthday,
      row_number() over (partition by type order by birthday asc) r
    from
      animals
) q
where r > 1

Функция row_number (), по слухам, работает и в DB2, но я не знаю, при каких обстоятельствах / версиях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...