DB2 Query - 消除maxvalues

时间:2012-01-23 08:38:11

标签: sql db2

我有以下问题(简化):

我有一张包含动物的桌子,例如:

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 个答案:

答案 0 :(得分:3)

一个简单的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

有关分析函数的更多示例,请阅读此article

答案 1 :(得分:1)

在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()函数rumoured也适用于DB2,但我不知道在哪种情况下/版本。

答案 2 :(得分:1)

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)

(编辑,发表评论。)