用于查找具有最近创建的相同列值的行的SQL查询

时间:2010-07-09 16:06:04

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

如果我的MySQL表people中有三列,请说id,name,created,其中name是一个字符串,并且创建的是一个时间戳..对于我有10行且每个行的场景,适当的查询是什么row有一个带有名字的记录。名称可以具有唯一的ID,但名称相似。所以你可以有三个Bob,两个Mary,一个Jack和4个Phil。

还有一个hobbies表,其中包含列id,hobby,person_id。

基本上我想要一个能够执行以下操作的查询:

归还所有没有兴趣爱好的人,但只检查创建的最新特色人,如果有意义的话。意思是如果有一个昨天创建的Bob人员,以及今天创建的人员。我只想知道今天创建的Bob是否有零爱好。昨天的那个不再具有相关性。

3 个答案:

答案 0 :(得分:3)

select pp.id
from people pp, (select name, max(created) from people group by name) p
where pp.name = p.name
and pp.created = p.created
and id not in ( select person_id from hobbies )

答案 1 :(得分:2)

SELECT latest_person.* FROM (
  SELECT p1.* FROM people p1 
  WHERE NOT EXISTS (
    SELECT * FROM people p2 
    WHERE p1.name = p2.name AND p1.created < p2.created
  )
) AS latest_person
LEFT OUTER JOIN hobbies h ON h.person_id = latest_person.id 
WHERE h.id IS NULL;

答案 2 :(得分:0)

试试这个:

   Select *
   From people p
   Where timeStamp = 
         (Select Max(timestamp)
          From people 
          Where name = p.Name
             And not exists 
                 (Select * From hobbies
                  Where person_id = p.id))