【问题标题】:select newest update record among similar record在相似记录中选择最新的更新记录
【发布时间】:2019-03-02 18:11:27
【问题描述】:

我有 2 个表格段和摘要。
我想以日期间隔列出节目,并仅显示最新更新的片段(粗体),因为它是该人的片段的最新副本。
这是我以前的查询,结果如下:

select seg.summ, su.channel, seg.block_id, seg.person, seg.updated_at as segupdate 
from segments seg 
   left join summaries su on seg.summ = su.id 
where su.created_at between '2018-06-06' and '2018-07-13' 
order by summ, block_id, seg.updated_at desc;   

我想要这个:

如何更改我的查询以仅显示粗体行?删除旧版本的重复项?

【问题讨论】:

    标签: postgresql datetime join select postgresql-9.1


    【解决方案1】:

    这就是我所做的:

    select distinct on (seg.summ, seg.block_id, seg.person) su.channel, seg.updated_at as segupdate 
    from segments seg 
      left join summaries su on seg.summ = su.id 
    where su.created_at between '2018-06-06' and '2018-07-13' 
    order by summ, block_id, person, seg.updated_at desc;
    

    【讨论】:

      【解决方案2】:

      您可以尝试使用ROW_NUMBER窗口函数,使行号order by segupdate DESC,然后得到rn = 1最新的数据行。

      SELECT * FROM 
      (
           SELECT *,ROW_NUMBER() OVER(PARTITION BY summ,channel,block_id,person order by segupdate DESC) rn
           FROM (
              select seg.summ, su.channel, seg.block_id, seg.person, seg.updated_at as segupdate 
               from segments seg 
               left join summaries su on seg.summ = su.id 
               where su.created_at between '2018-06-06' and '2018-07-13' 
           ) t1
      ) t1
      where rn = 1
      

      【讨论】:

      • 没有重复,但我选择的是最旧的而不是最新的。
      猜你喜欢
      • 1970-01-01
      • 2021-05-16
      • 2016-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      • 1970-01-01
      相关资源
      最近更新 更多