按相同值对分区进行排序

Rank partition by the same value

我正在使用GreenPlum引擎,我正在使用pgAdmin查询数据,我只有读取权限,所以我无法创建函数或过程,甚至我也不知道为什么我无法工作有变量。

这是我的数据和想要的结果:

Pais    Campaña     Representante   Actividad   Racha   **Desired value**
96      20150302    758593197           1       1           1
96      20150303    758593197           1       2           2
96      20150304    758593197           1       3           3
96      20150305    758593197           0       1           1
96      20150306    758593197           1       4           1
96      20150307    758593197           0       2           1
96      20150308    758593197           0       3           2
96      20150309    758593197           1       5           1
96      20150310    758593197           0       4           1
96      20150311    758593197           0       5           2
96      20150312    758593197           0       6           3
96      20150313    758593197           0       7           4
96      20150314    758593197           1       6           1

这是我的尝试之一:

Select 
    Pais,Campaña,Representante,Actividad,
    rank() over(partition by Pais,Representante,Actividad
                order by Pais,Campaña,Representante) as Racha
From TEMP20151109
Order By Campaña;

想要的值是Actividad值的连续性计数,当Actividad为0时我需要重新计数

诀窍是将具有相同Actividad的连续行组成一组,然后您可以轻松计算行号(rn):

SELECT Pais, Campana, Representante, Actividad
     , row_number() OVER (PARTITION BY Pais, Representante, Actividad, grp
                          ORDER BY Campana) AS rn
FROM  (
   SELECT Pais, Campana, Representante, Actividad
        , row_number() OVER (PARTITION BY Pais, Representante ORDER BY Campana)
       -  row_number() OVER (PARTITION BY Pais, Representante, Actividad
                             ORDER BY Campana) AS grp
   FROM   tbl
   ) sub
ORDER  BY Campana;

除了 grp,您还必须在外部查询 PARTITION BY 子句中重复列(或表达式)。在外部 window 函数中重复相同的行顺序并仅附加另一列,从而建立在预先排序的数据上,相对便宜。

某些列可能会从 PARTITION BY 子句中删除,具体取决于缺少的 table 定义(哪些列是唯一的?)和 WHERE 条件。

SQL Fiddle 带有扩展测试用例。

非常相似的案例:

dba.SE的详细解释的相关回答:

顺便说一句,在 window 函数的 ORDER BY 子句中重复 PARTITION 子句(PaisRepresentante 在您的原始查询中)。那只是没有效果的噪音。