mysql按顺序查询->限制,排序,组。如何?

标签 mysql greatest-n-per-group

哦,这让我发疯了。我有消息表,简化示例:

id[int] - sender[int] - receiver[int] - conv_id[bigint] - received[int] - stamp[int]
   1          2             1               5                  1          timestamp+1 
   2          2             1               5                  1          timestamp+2
   3          3             1               6                  1          timestamp+3 
   4          4             1               7                  1          timestamp+4
   5          5             1               8                  1          timestamp+5 
   6          5             1               8                  1          timestamp+6

现在我感兴趣的是按接收者分组、限制为 3 个发送者并按标记 DESC 排序的结果。如何做到这一点?

我已经有了这个,但它正在获取所有消息,我相信这不是不降低性能的最佳方法,即使我真的不是 mysql 的大师:

SELECT id, sender, receiver, conv_id FROM
   (SELECT m.id, m.sender, m.receiver,m.conv_id 
    FROM messages AS m WHERE m.receiver = 1 AND m.received = 1 
    ORDER BY m.stamp DESC) as messages_tmp 
WHERE receiver = 1 GROUP BY conv_id ORDER BY NULL LIMIT 0,3

这应该按顺序返回这些结果:

id = 6, id = 4, id = 3

问题是我已经在对 m.received = 0 进行查询,如果没有足够的结果,则 m.received = 1 >。到目前为止,我的数据库还不是太大,但如果它变得更大,我担心它会很慢。我正在考虑限制子查询结果的可能性,但不知道如何做到这一点,并确保在 GROUP 之后我会得到足够的结果。 谢谢。

最佳答案

SELECT id, sender, receiver,conv_id 
FROM messages WHERE receiver = 1 AND received = 1 
GROUP BY conv_id
ORDER BY id DESC LIMIT 3

关于mysql按顺序查询->限制,排序,组。如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8283853/

相关文章:

mysql - 每小时获取按日期时间分组的最高值记录

mysql - 为什么在执行子查询时出现 MySQL 语法错误?

Python pymySQL 发送带引号的字符串

MySQL : Syntax error creating new trigger with Inner Join

php - 使用 PHP/Jquery 显示从 Mysql 数据库到 Html5 bootstrap 的值

mysql - 在 SQL 中,如何为每个组选择前 2 行

SQL SELECT 列上具有最大值的行并返回所有列

mysql - SQL 转换协助

mysql - sql从表中获取第N最高的工资

sql - 如何查询数据库中用户的排名,但只考虑每个用户的最新条目?