我有一系列外键,每个键构成表中的多行。如何只获取与指定条件匹配的顶行?
我有这样的表
ID NAME DATE
----------------------
1 abc 5/10/15
1 abc 6/11/15
2 pqr 7/11/15
2 pqr 8/10/15
3 xyz 9/12/15
我需要输出像这样
其中条件是日期> 5/11/15和ID(1,2)
ID NAME DATE
-----------------
1 abc 6/11/15
2 pqr 7/11/15
答案 0 :(得分:1)
您可以使用row_number()
执行所需操作。我不确定你到底想要什么。我最好的猜测是获得满足条件的最小日期行:
select t.*
from (select t.*,
row_number() over (partition by id order by date) as seqnum
from t
where date > '2015-11-05' and id in (1, 2)
) t
where seqnum = 1;
答案 1 :(得分:0)
只要没有其他行具有相同的名称和更早的日期,请使用NOT EXISTS
返回一行:
select t1.*
from tablename t1
where not exists (select * from tablename t2
where t2.name = t1.name
and t2.date < t1.date
and t2.date > '5/11/15' and t2.ID in (1,2))
and t1.date > '5/11/15' and t1.ID in (1,2)
JOIN
替代方案,或许更好的MySQL答案:
select t1.*
from tablename t1
join (select name, min(date) from tablename
where date > '5/11/15' and t2.ID in (1,2)
group by name) as t2
on t1.name = t2.name and t1.date = t2.date
where t1.date > '5/11/15' and t1.ID in (1,2)
Core SQL-99。