我有两个表,table1包含旧值,table2包含最新值,我想在table1中显示最新值,但我没有任何告诉我这是table2中最新值的内容。
例如
表1
CID-----PID-----RID
CT1-----C-------R1
CT2-----C-------R2
CT3-----C-------R3
CT4-----C-------R4
表2
CID-----PID----RID
CT1-----A-------R1
CT1-----C-------R11
CT2-----C-------R2
CT3-----A-------R3
CT4-----A-------R4
条件是我必须优先考虑值C以防两个值(A和C)都存在它的RID变化所以需要在输出表中得到它,对于相同的CID和唯一值我将简单替换它来自table2的table1,所以输出将是这样的
表3
CID-----PID----RID
CT1-----C-------R11
CT2-----C-------R2
CT3-----A-------R3
CT4-----A-------R4
答案 0 :(得分:0)
我可能会遗漏一些东西,但这不是简单的:
select cid, max(pid)
from table2
group by cid;
如果您想要完整记录,请改为使用ROW_NUMBER
排名:
select cid, pid, rid
from
(
select cid, pid, rid, row_number() over (partition by cid order by pid desc) as rn
from table2
)
where rn = 1;
您还可以使用案例表达式进行排名,例如:
(partition by cid order by case pid when 'C' then 1 when 'A' then 2 else 3 end) as rn
更新:现在你终于解释了你的目标......
您想要或多或少地在上面给出的第二个查询。只有您想要来自两个表的数据,您可以使用UNION ALL
获得这些数据。您可以轻松地为每一行提供排名:
然后再次获得排名最高的行:
select cid, pid, rid
from
(
select cid, pid, rid, row_number() over (partition by cid order by rnk) as rn
from
(
select cid, pid, rid, case when pid = 'C' then 1 else 2 end as rnk from table2
union
select cid, pid, rid, 3 as rnk from table1
)
)
where rn = 1;