按相同的值排序分区

Mel*_*goV 1 sql postgresql window-functions greenplum pgadmin

我正在使用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;
Run Code Online (Sandbox Code Playgroud)

期望值是值的连续性的计数Actividad,我需要在Actividad0 时重置计数.

Erw*_*ter 5

诀窍是形成具有相同行的连续行组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;
Run Code Online (Sandbox Code Playgroud)

除了以外,您还必须PARTITION BY在外部查询的子句中重复列(或表达式).在外部窗口函数中重复相同的行顺序并且只是追加另一列,因此构建在预先排序的数据上相对便宜. grp

PARTITION BY根据缺少的表定义(哪些列是唯一的?)和WHERE条件,可能会从子句中删除某些列.

SQL小提琴扩展测试用例.

非常相似的情况:

相关答案及dba.SE的详细说明:

顺便说一句,重复ORDER BY在PARTITION子句(Pais和Representante原始查询)中使用的窗口函数子句中的列是没有意义的.那只是没有效果的噪音.