我正在使用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时重置计数。
答案 0 :(得分: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;
除了 PARTITION BY
之外,您还必须在外部查询的grp
子句中重复列(或表达式)。在外部窗口函数中重复相同的行顺序并且只是追加另一列,从而建立在预先排序的数据上相对便宜。
根据缺少的表定义(哪些列是唯一的?)和PARTITION BY
条件,某些列可能会从WHERE
子句中删除。
非常相似的案例:
关于dba.SE的详细解释的相关答案:
顺便说一下,在原始ORDER BY
子句(PARTITION
和Pais
中使用的窗口函数的Representante
子句中重复列是没有意义的。查询)。这只是噪音而没有效果。