如何在具有相同id的结果中获得mysql排名

时间:2010-09-25 19:31:53

标签: sql mysql ranking rank

快速提问,我有一个消息表,每个消息都有一个时间戳,一个reply_id和一个topic_id。 Reply_ids可以与其他人相同,这意味着这些消息属于同一组回复。当我选择带有最小时间戳的reply_id时,意味着它是该组的第一条消息,我还想知道它在topic_id的所有结果中的编号位置,例如。 3(3)4th(4)等有谁知道怎么做或有任何建议?这可以在纯sql中完成吗?

SELECT reply_id,min(timestamp) as min FROM messages
   WHERE reply_chunk_id = ?
     AND topic_id = ?

1 个答案:

答案 0 :(得分:1)

使用纯SQL:

SELECT m.reply_id,
       MIN(m.timestamp) as min,
       (SELECT COUNT(*)
          FROM MESSAGES t
         WHERE t.id <= m.id) AS rank
  FROM MESSAGES m
 WHERE m.reply_chunk_id = ?
  AND m.topic_id = ?

仅当replyid为唯一值时才有效。如果replyid之前有replyid重复,则COUNT将会错过。

MySQL不支持的分析函数是更好的选择。您可以使用MySQL SELECT语句中的变量重新创建功能。