我有一个'stream_update'表,用于存储用户发布到他们订阅的群组的更新。该表包含以下字段:
基本上我正在尝试编写一个查询,该查询为他们订阅的每个组中的每个用户获取最后一个流更新。因此,如果用户订阅了3个组,则会获得他在每个组中编写的最后一次更新。
我尝试了以下内容:
SELECT * FROM stream_update GROUP BY group_id, user_id
这似乎有效,但它会得到最新的记录而不是最新的记录。添加“ORDER BY”不起作用,因为它只对已经获取的记录进行排序。
知道如何为此编写查询吗?
非常感谢您的帮助:)
答案 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
这样的东西应该能给你我认为你想要的东西。