代码之家  ›  专栏  ›  技术社区  ›  maddy

如何根据oracle SQL中的某一列值进行排名

  •  0
  • maddy  · 技术社区  · 1 年前
    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

    enter image description here

    1 回复  |  直到 1 年前
        1
  •  0
  •   MT0    1 年前

    您似乎想移动 CASE 表达式 ORDER BY 子句(而不是有不同的 lifecycle_type s在不同分区中):

    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 ;