2010-11-17 69 views
1

我有一個'stream_update'表,用於存儲用戶發佈到他們訂閱的組的更新。該表具有以下字段:MySQL:分組問題

  • ID(索引,自動遞增)
  • USER_ID
  • GROUP_ID
  • stream_update
  • 時間戳

基本上我想寫一個查詢,獲取他們訂閱的每個組中每個用戶的最後一次流更新。因此,如果用戶訂閱了3個組,則會獲得他在每個組中寫入的最後更新。

我已經試過如下:

SELECT * FROM stream_update GROUP BY group_id, user_id 

這似乎工作,但它會得到最久的記錄不是最新的。添加「ORDER BY」不起作用,因爲它僅對已獲取的記錄進行排序。

任何想法如何我可以寫這個查詢?

你的幫助是非常讚賞:)

回答

3
select su.user_id, su.group_id, su.stream_update, su.timestamp 
    from stream_update su 
     inner join (select user_id, group_id, max(timestamp) as maxtime 
         from stream_update 
         group by user_id, group_id) m 
      on su.user_id = m.user_id 
       and su.group_id = m.group_id 
       and su.timestamp = m.maxtime 
0

您是否嘗試過這樣的事情:

SELECT id,user_id,group_id,max(stream_update),timestamp 
FROM stream_update 
GROUP BY group_id, user_id 
0

工作的呢?

select T1.user_id, t1.group_id, t2.stream_update 
from 
    (  
    select user_id, group_id, max(timestamp) as latesttimestamp 
    from streamtable 
    group by user_id, group_id 
) as T1 

    inner join streamtable as T2 
    on T1.user_id = T2.user_id 
    and T1.group_id = T2.group_id 
    and T1.latesttimestamp = T2.timestamp 
0

從選擇可能選擇......所以做你的常規選擇(上圖),並在輸出中包括時間戳

然後把它包在

SELECT whatever-fields you want FROM (
    inner-select-statement with grouping 
) 
ORDER BY timestamp 

類似的東西應該給你我想你以後的事情。