从表中获取每个主键的顶级数据

时间:2016-02-25 12:17:15

标签: mysql sql greatest-n-per-group

我有一系列外键,每个键构成表中的多行。如何只获取与指定条件匹配的顶行?

我有这样的表

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

2 个答案:

答案 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。