自己联接表并按最大日期排序

时间:2018-08-19 10:00:25

标签: sql

我有一张桌子,如图所示:

enter image description here

我希望列表按日期发布订单。 如果帖子没有评论发布日期作为日期。 如果帖子中有评论,则以最后评论日期为发布日期。

结果如图片所示:

这是什么SQL查询?

3 个答案:

答案 0 :(得分:0)

从YOUR_TABLE_NAME中选择*,其中Parentid为空,按日期升序排列;

答案 1 :(得分:0)

我认为这会对您有所帮助。

select *,(select max(date) from table as t2 where t2.parentid = t1.postid ) as maxdate 
   from table as t1 
   where type = 'P'
   order by maxdate asc

答案 2 :(得分:0)

这种方法将注释中的最大日期与子项中的最大日期合并在一起。

select p.*,
       coalesce(p2.maxdate, p.date) as date
from posts p left join
     (select p2.parentid, max(p2.date) as maxdate
      from posts p2
      where p2.parentid is not null
      group by p2.parentid
     ) pc
     on pc.parentid = p.postid
where p.type = 'P'
order by coalesce(p2.maxdate, p.date) asc;

还有一种有趣的聚合方法,如果您希望减少列数(获取所有列会比较麻烦)。

仅获取每个帖子的日期:

select coalesce(parentid, postid) as postid,
       max(date)
from posts p  
group by  coalesce(parentid, postid);