如果我的MySQL表people
中有三列,请说id,name,created,其中name是一个字符串,并且创建的是一个时间戳..对于我有10行且每个行的场景,适当的查询是什么row有一个带有名字的记录。名称可以具有唯一的ID,但名称相似。所以你可以有三个Bob,两个Mary,一个Jack和4个Phil。
还有一个hobbies
表,其中包含列id,hobby,person_id。
基本上我想要一个能够执行以下操作的查询:
归还所有没有兴趣爱好的人,但只检查创建的最新特色人,如果有意义的话。意思是如果有一个昨天创建的Bob人员,以及今天创建的人员。我只想知道今天创建的Bob是否有零爱好。昨天的那个不再具有相关性。
答案 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))