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 时重置计数.
诀窍是形成具有相同行的连续行组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原始查询)中使用的窗口函数子句中的列是没有意义的.那只是没有效果的噪音.
| 归档时间: |
|
| 查看次数: |
2692 次 |
| 最近记录: |