我有以下问题(简化):
我有一张包含动物的桌子,例如:
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
到目前为止,我还没有找到一种方法来对条目进行分组,然后从每个组中删除第一个条目。我只能找到如何删除特定行。
甚至可以解决这个问题吗?
非常感谢你的帮助。非常感谢。
答案 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)
(编辑,发表评论。)