sql明显的功能麻烦

时间:2012-07-07 04:54:40

标签: mysql sql sqlite

我有一个查询

 SELECT   m1.mid mid, m1.uid uid, m1.date, m1.body body
 FROM messages  m1
 WHERE m1.chat_id IS NULL  
   and deleted = 0  
   AND m1.date in    
    ( 
       SELECT MAX(m2.date) 
       FROM messages m2   
       WHERE m2.uid = m1.uid 
         AND m2.chat_id IS NULL 
         and m2.deleted = 0  
    )

这个查询实际上并不是我编写的,我得到了帮助here - 非常讨厌他们。

但我有一个问题。当有多个消息具有相同的日期和uid(来自相同的用户)值时,我得到两个或多个具有相同日期和uid的记录,但我想只有一个(无论哪个,或者中间最大的消息)

我尝试使用distinct(uid)但没有成功。有没有其他方法可以实现我想要的结果?

2 个答案:

答案 0 :(得分:1)

您可以使用此解决方案查找每uid的最新消息:

SELECT b.*
FROM
(
    SELECT MAX(mid) AS maxmid
    FROM messages
    WHERE chat_id IS NULL
    GROUP BY uid
) a
INNER JOIN messages b ON a.maxmid = b.mid

答案 1 :(得分:0)

相反,您可以添加额外的列“count”并在同一天显示来自用户的消息数量!!

通过这个你可以避免,获得重复的记录!