就像我有如下表格一样:
是否可以从三个类别中获得三个帖子?请帮帮我。
答案 0 :(得分:0)
要检索每个类别的最新帖子
select p.*
from posts p
join (
select category, max(time_stamp) maxts
from posts
group by p.category
) t on p.category = t.category and p.time_stamp = t.maxts
另一种解决方案是使用从属子查询,但效率较低:
select p.*
from posts p
where p.time_stamp = (
select max(p2.time_stamp)
from posts p2
where p2.category = p.category
)
答案 1 :(得分:0)
如果您想显示最新time_stamp
的3个类别的1条记录,则以下查询将完成工作:
select *from
table
where (id,category,time_stamp) in (select
max(id),category,max(time_stamp)
from table
group by category)
group by category
order by time_stamp desc
limit 3
;
希望它有所帮助!
答案 2 :(得分:0)
您可以使用max
和group by
为每个类别设置最后一个时间戳 - 按照时间戳降序排序,然后使用limit
排名前三。最后使用id
上的连接条件将此结果与原始记录结合使用,这样即使时间戳上存在关联,也不会得到超过三个结果,并输出这些结果。
tst
是表名:
select tst.*
from tst
inner join (
select category,
max(time_stamp) time_stamp,
max(id) id
from tst
group by category
order by 2 desc
limit 3
) as topthree
on topthree.id = tst.id;
上查看它
答案 3 :(得分:0)
以下sql(MySQL)查询提供每个类别的最新记录:
select id,title,category,time_stamp from
(
select id,title,category,time_stamp,
@cat_rank:=if(@prev_cat=category,@cat_rank+1,1) as
cat_rank,@prev_cat:=category
from t_post,(select @cat_rank:='',@prev_cat:='')t
order by category,time_stamp desc
)temp where cat_rank=1 ;
如果只需要3个类别,则将结果限制为3。