select 相似记录中最新的更新记录
select newest update record among similar record
我有 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;
我想要这个:
如何更改我的查询以仅显示粗体行?删除旧版本的重复项?
你可以尝试使用ROW_NUMBER
window函数,使行号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
这就是我所做的:
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 个表段和摘要。
我想按日期间隔列出节目,只显示最新更新的片段(粗体),因为它是该人片段的最新副本。
这是我曾经得到以下结果的查询:
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;
我想要这个:
如何更改我的查询以仅显示粗体行?删除旧版本的重复项?
你可以尝试使用ROW_NUMBER
window函数,使行号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
这就是我所做的:
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;