gpt4 book ai didi

sql - 按相同值对分区进行排序

转载 作者:行者123 更新时间:2023-11-29 12:32:57 26 4
gpt4 key购买 nike

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

这是我的数据和期望的结果:

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

This is one of my attempts:

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 子句中重复列(或表达式)。在外部窗口函数中重复相同的行顺序并仅附加另一列,从而建立在预先排序的数据上,相对便宜。

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

SQL Fiddle带有扩展测试用例。

非常相似的情况:

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

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

关于sql - 按相同值对分区进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33619766/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com