如何在有条件的情况下运行density_rank()函数?

时间:2019-11-19 22:39:52

标签: sql postgresql

这是我的脚本:

UPDATE public.build_analyzer_objectdatanormalized normal
SET unique_code = concat_ws('.', normal.unique_code, d_rank.code)
    FROM (SELECT main.year_data
               , main.build_code
               , main.form_owner_code
               , r_normal.unique_code
               , dense_rank() OVER (ORDER BY r_normal.unique_code) code
              FROM public.build_analyzer_objectdatanormalized          r_normal
                       INNER JOIN public.build_analyzer_objectdatamain main ON r_normal.main_id = main.id
    )                                         d_rank
       , public.build_analyzer_objectdatamain main
    WHERE normal.main_id = main.id
      AND normal.unique_code = d_rank.unique_code
      AND main.form_owner_code = d_rank.form_owner_code
      AND main.year_data != d_rank.year_data;

ForeginKey表中的build_analyzer_objectdatanormalized表和build_analyzer_objectdatamain字段中有一个unique_code,其中包含以下值:

10.13.109.75.00
10.13.109.75.00
10.13.109.75.00
10.13.152.38.120
10.13.152.38.120

如果我删除除normal.unique_code = d_rank.unique_code以外的所有过滤器,它将在unique_code的末尾增加排名。

但是我需要应用过滤器,例如-一组唯一值(每个等级)仅是year_data表中具有各种build_analyzer_objectdatamain的值。但是我的过滤器不起作用。

是否只有在满足条件(unique_code相同的对象使用不同的年份)的情况下,才可以应用唯一排名?

更新(示例数据):

build_analyzer_objectdatanormalized执行脚本之前的结果:

unique_code     main_id
10.13.84.38.204 28864
10.13.84.38.204 28865
10.13.84.38.204 16161
10.13.109.75.00 17635
10.13.109.75.00 17637
10.13.109.75.00 17636

build_analyzer_objectdatamain结果:

id  form_owner_code year_data
16161   11  2012
17635   11  2017
17636   11  2017
17637   11  2017
28864   11  2013
28865   11  2013

build_analyzer_objectdatanormalized在执行脚本之前:

unique_code       main_id   year_data   form_owner_code
10.13.84.38.204.59  28864   2013    11
10.13.84.38.204.59  28865   2013    11
10.13.84.38.204.59  16161   2012    11
10.13.109.75.00.10  17635   2017    11
10.13.109.75.00.10  17637   2017    11
10.13.109.75.00.10  17636   2017    11

因此,唯一等级(59,10)适用于同一年份的对象,但是我仅在具有不同年份的对象时才需要使用唯一等级。

0 个答案:

没有答案