快速提问,我有一个消息表,每个消息都有一个时间戳,一个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 = ?
答案 0 :(得分:1)
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语句中的变量重新创建功能。