我有一张桌子,如图所示:
我希望列表按日期发布订单。 如果帖子没有评论发布日期作为日期。 如果帖子中有评论,则以最后评论日期为发布日期。
结果如图片所示:
这是什么SQL查询?
答案 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);