如果您需要在 MySQL v5.* 中完成,可以使用以下查询:
SELECT tab.ID,
tab.CHAT_GROUP_ID,
tab.MESSAGE,
aggregated.SUM_READ_,
aggregated.MAX_TIME
FROM tab
INNER JOIN (SELECT CHAT_GROUP_ID,
SUM(IF(READ_=0,1,0)) AS SUM_READ_,
MAX(CREATED_AT) AS MAX_TIME
FROM tab
GROUP BY CHAT_GROUP_ID ) aggregated
ON tab.CHAT_GROUP_ID = aggregated.CHAT_GROUP_ID
AND tab.CREATED_AT = aggregated.MAX_TIME
首先,您创建一个包含READ
和CREATED_AT
相对于CHAT_GROUP_ID
的聚合值的视图,然后使用这些信息从主表中检索所需的信息。
试试here。
【讨论】:
-
非常感谢,尝试了两种解决方案,请给我一些时间
-
哇!杰出的!我没有意识到我可以在那个链接上测试它,你是国王!非常感谢!
-
fwiw,窗口函数选项往往会表现得更好,并且与加入投影相同的方式对关系不敏感。