【问题标题】:Get latest child row with parent table row获取带有父表行的最新子行
【发布时间】:2020-10-31 11:57:47
【问题描述】:

两个表帖子和 cmets。帖子有很多 cmets(cmets 有 post_id 外键来帖子 id 主键)

posts

id | content
------------

comments

id | post_id | text | created_at  
-------------------------------

我需要所有帖子、其内容和最新评论(基于 max(created_at) 及其文本。

我可以使用这个来达到 created_at

with comment_latest as (select 
   post_id, 
   max(created_at) as latest_commented_at 
from comments 
group by 1)

select 
    posts.id, 
    posts.content, 
    comment_latest.latest_commented_at 
from posts 
left join comment_latest on comment_latest.post_id = posts.id
order by posts.id desc 
limit 10

但我也想要评论的文字。

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    你可以使用 Postgres 扩展 distinct on:

    select distinct on (p.id) p.* c.*
    from posts p left join
         comments c
         on p.id = c.post_id
    order by p.id desc, c.created_at desc
    limit 10;
    

    这将按order by 子句对数据进行排序,根据distinct on 中的键返回第一行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      相关资源
      最近更新 更多