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

标签 sql mysql greatest-n-per-group

如果我的 MySQL 表 people 中有三列,比如 id、name、created,其中 name 是一个字符串,created 是一个时间戳。对于我有 10 个场景的适当查询是什么行,每一行都有一个带有名称的记录。这些名字可以有一个唯一的 id,但仍然是一个相似的名字。因此,您可以拥有三个 Bob、两个 Mary、一个 Jack 和 4 个 Phil。

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

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

返回所有爱好为零的人,但如果有意义,则只检查最近创建的不同人。意思是如果有一个昨天创建的 Bob 人和一个今天创建的人。我只想知道今天创建的 Bob 是否有零爱好。昨天的那个已经不相关了。

最佳答案

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 )

关于用于查找最近创建的具有相同列值的行的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3214457/

相关文章:

php - 在这种情况下,我将选择什么来实现缓存?

mysql - 如何在 MYSQL 中通过另一列选择具有 MAX(列值)、PARTITION 的行?

mysql - 如何仅对该查询中的 3 个最佳分数求和?

mysql - 初学者 - 查询标记为文本的列中的值

c# - 将巨大的 sql 转储文件拆分成尽可能小的 block

sqlite - SQL-选择按多个字段分组的前n个,按计数排序

mysql - 外键创建

mysql - SQL 用相同的值更新多行

mysql - 为什么我从这个 SQL 查询中得到错误的结果?

sql - 如何在单个 POSTGRESQL 查询中获取列名及其引用类型(即 PRIMARY KEY 和 FOREIGN KEY)?