MySQL:分组问题

时间:2010-11-17 20:23:54

标签: mysql

我有一个'stream_update'表,用于存储用户发布到他们订阅的群组的更新。该表包含以下字段:

  • id(索引,自动增量)
  • USER_ID
  • GROUP_ID
  • stream_update
  • 时间戳

基本上我正在尝试编写一个查询,该查询为他们订阅的每个组中的每个用户获取最后一个流更新。因此,如果用户订阅了3个组,则会获得他在每个组中编写的最后一次更新。

我尝试了以下内容:

SELECT * FROM stream_update GROUP BY group_id, user_id

这似乎有效,但它会得到最新的记录而不是最新的记录。添加“ORDER BY”不起作用,因为它只对已经获取的记录进行排序。

知道如何为此编写查询吗?

非常感谢您的帮助:)

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

你有没有试过这样的事情:

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

答案 2 :(得分: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

答案 3 :(得分:0)

可能从选择中选择...所以你的常规选择(上图)并在输出中包含时间戳

然后将其包装在

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

这样的东西应该能给你我认为你想要的东西。