在查询中选择最大序列号

时间:2014-12-12 04:10:58

标签: mysql sql

所以我有一个看起来像这样的表,我有用户消息存储,以及他们的状态(读取(' R')或未读(' U')) 。它们还存储有状态编号,以在消息的线程中显示它们的顺序。

messageid  userid   sequence    status
93         250        1          A
93         250        2          U
93         250        3          U
94         250        1          A
95         250        1          U

我想计算此表中针对用户ID#250的未读消息。结果行应为:

messageid  userid   sequence    status
93         250        3          U
95         250        1          U

我有一个简单的部分,但相信我需要内部连接SELECT(最大)。这是最容易的部分,效果很好:

SELECT messageid FROM message_recips WHERE message_recips.userid=250 AND message_recips.status='N'

下面是什么无法弄清楚添加的语法:

AND message_recips.sequence=(SELECT MAX(message_recips.sequence))

真诚感谢您的帮助,非常感谢! mySQLi或mySQL运行正常,因为我正在切换。

2 个答案:

答案 0 :(得分:2)

对于特定用户:

SELECT COUNT(DISTINCT messageid) AS unread_messages
FROM message_recips
WHERE status = 'U'
AND userid = 250;

所有用户报告:

SELECT userid, COUNT(DISTINCT messageid) AS unread_messages
FROM message_recips
WHERE status = 'U'
GROUP BY userid;

答案 1 :(得分:1)

如果我正确理解您的问题,您希望获取状态未读的最大序列号,该序列号由messageid和userid分组。您可以使用max聚合:

select messageid, 
       userid,
       max(sequence),
       status
from message_recips
where status = 'U'
group by messageid, userid, status