如何从3个不同的类别中检索3条最新记录?

时间:2017-10-28 09:07:19

标签: mysql sql

就像我有如下表格一样:

enter image description here

是否可以从三个类别中获得三个帖子?请帮帮我。

4 个答案:

答案 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
;

Click here for Updated Demo

希望它有所帮助!

答案 2 :(得分:0)

您可以使用maxgroup 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;

rextester

上查看它

答案 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。