Mysql 每列值的SQL限制结果

Mysql 每列值的SQL限制结果,mysql,sql,limit,Mysql,Sql,Limit,可能重复: 我试图编写一个查询,它的功能类似于LIMIT语句,但它将限制每个不同列值而不是整个结果集返回的结果。我不知道确切地解释我想要什么的术语,所以我将使用一个例子 在这个例子中,这是一个非常简化的版本,我实际上是在尝试为系统中的每个用户选择5条最新消息。下表将userid映射到messageid。消息ID按时间顺序分配,因此最近的消息将具有更高的ID值 TABLE Messages ( userId int, messageId int ) 也许这就是你想要的: SELECT us

可能重复:

我试图编写一个查询,它的功能类似于LIMIT语句,但它将限制每个不同列值而不是整个结果集返回的结果。我不知道确切地解释我想要什么的术语,所以我将使用一个例子

在这个例子中,这是一个非常简化的版本,我实际上是在尝试为系统中的每个用户选择5条最新消息。下表将userid映射到messageid。消息ID按时间顺序分配,因此最近的消息将具有更高的ID值

TABLE Messages (
 userId int,
 messageId int
)

也许这就是你想要的:

SELECT userId, messageId FROM (
    SELECT userId, messageId,
        if(@uid = userId, @cnt := @cnt + 1, (@cnt := 0 || @uid := userId)) cnt
    FROM Messages
    ORDER BY userId, messageId DESC
) msg_list
WHERE cnt <= 5;

你需要一个查询。什么是RDBMS?MySQL?在这里也可以看到其他人。这是一个好主意,但只有在您可以按用户ID订购的情况下才有效