0

質問があります

 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  
    )

このクエリは実際には私が書いたものではありません。ここで助けてもらいました。

しかし、私には問題があります。同じ日付と uid (同じユーザーからの) 値を持つ複数のメッセージがある場合、同じ日付と uid を持つ 2 つ以上のレコードを取得しますが、1 つだけが必要です (どれでも、または最大の mid fe を持つメッセージ)

成功結果なしで、distinct(uid) を使用しようとしました。私が望む結果を達成する他の方法はありますか?

4

2 に答える 2

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
于 2012-07-07T05:03:47.813 に答える
0

むしろ、「カウント」列を追加して、同じ日にユーザーからのメッセージの数を表示できます!!

これにより、重複レコードの取得を回避できます!

于 2012-07-07T04:58:27.430 に答える