如何根据Oracle SQL中的某个列值进行排名

3ks5zfa0  于 2023-06-22  发布在  Oracle
关注(0)|答案(1)|浏览(137)
select * from 
(
  SELECT NORM_VERSION, NORM_FULL_VERSION, NORM_PRODUCT_VALUE, LIFECYCLE_TYPE, START_DATE,
         rank() OVER (PARTITION BY NORM_VERSION, NORM_FULL_VERSION,
                                   NORM_PRODUCT_VALUE,
                                   CASE WHEN LIFECYCLE_TYPE ='internal'
                                        then 1 end
                      ORDER BY SYS_UPDATED_ON DESC) as dest_rank
  FROM LIFECYCLE
)
where dest_rank = 1 ;

如何排名,如果生命周期类型为内部,则将其排名为1,然后从上述查询中的分组列中递增排名。
从下面的屏幕截图我试图排名内部1然后发布者2

o0lyfsai

o0lyfsai1#

您似乎希望将CASE表达式移动到ORDER BY子句中(而不是在不同的分区中使用不同的lifecycle_type):

SELECT *
FROM   (
  SELECT NORM_VERSION,
         NORM_FULL_VERSION,
         NORM_PRODUCT_VALUE,
         LIFECYCLE_TYPE,
         START_DATE,
         RANK() OVER (
           PARTITION BY
             NORM_VERSION,
             NORM_FULL_VERSION,
             NORM_PRODUCT_VALUE
           ORDER BY
             CASE WHEN LIFECYCLE_TYPE ='internal' THEN 1 ELSE 2 END,
             SYS_UPDATED_ON DESC
         ) as dest_rank
  FROM LIFECYCLE
)
WHERE  dest_rank = 1 ;

相关问题