0

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

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

1 回答 1

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 语句中的变量重新创建功能。

于 2010-09-25T19:36:27.833 回答