2012-07-07 60 views
0

我有一個查詢SQL獨特的功能麻煩

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的記錄,但我只想要一個(不管是哪一個或哪一個消息與最大的中期fe)

我試過使用不同的(uid)沒有成功的結果。有沒有其他方法可以達到我想要的結果?

回答

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 
+0

仍然錯誤。 http://c.kurganec.ru/p/jxvT0ci.png有與同一個uid的記錄。提前致謝! – 2012-07-07 05:14:51

+0

您是否在尋找每個uid的最新消息? – 2012-07-07 05:17:00

+0

是的,這正是我所期待的! – 2012-07-07 05:19:34

0

相反,您可以添加一個額外的列「計數」,並在同一天顯示來自用戶的消息數量!

通過這個你可以避免,獲取重複的記錄!

+0

首先,它實際上是不一樣的一天,它是同秒。第二,我真的沒有獲得添加新專欄的好處。 – 2012-07-07 05:15:09

+0

如果我是對的,你的子查詢返回多行。您還應該選擇中間的最大值,以便獲得最新的記錄。 – 2012-07-07 05:21:48