我在Postgres数据库中有一个查询,它结合了客户端订阅。
我想添加一个称为“连续月份”的变量,但我不确定在Postgres中如何添加。
我的原始桌子是这样的:
我希望有一个连续数月的东西,比如:
谢谢你在先进的帮助!
根据tag OP,他显然意识到这是一个缺口和孤岛问题。此查询提取月份和年份信息,以生成按月递增的序列。之后,只需要使用标准差分逻辑来查找不同步的行,并创建标记岛。
with A as (
select *,
date_part('year', dt) * 12 + date_part('month', dt)
- row_number() over (partition by client, product order by dt) as grp
from T
)
select *,
row_number()
over (partition by client, product, grp order by dt) as consecutive_months
from A;
如果一个给定的客户产品在同一个月内有多行是可以接受的,那么在这两个位置将行数()
切换到密集列()。
https://dbfiddle.uk/?rdbms=postgres_9.5
看来你有自己的差距和岛屿类型的问题。
诀窍是根据每个客户的连接日期计算一些排名。
然后可以根据客户和排名计算序列号。
select client, product, "Date"
, row_number() over (partition by client, daterank order by "Date") as Consecutive_months
from
(
select "Date", client, product
, dense_rank() over (partition by client order by "Date")
+ (DATE_PART('year', AGE(current_date, "Date"))*12 +
DATE_PART('month', AGE(current_date, "Date"))) daterank
from raw t
) q
order by "Date", client
client | product | Date | consecutive_months -----: | :------ | :--------- | -----------------: 1 | Sub | 2020-10-01 | 1 1 | Sub | 2020-11-01 | 2 2 | Sub | 2020-11-01 | 1 2 | Sub | 2020-12-01 | 2 1 | Sub | 2021-01-01 | 1 1 | Sub | 2021-02-01 | 2 2 | Sub | 2021-02-01 | 1
分贝
问题内容: 感谢Mike提出的添加创建/插入语句的建议。 我想添加一个新列,即“当前条纹天数”,因此 结果 如下所示: 但我不知道如何将技巧与其他窗口功能结合使用以获取正确的结果。 问题答案: 在此表上构建(不使用SQL关键字“ date”作为列名。): 询问: 从另一个减去a得到一个。由于您一直在寻找连续的日子,因此下一行将增加 一 。如果从中减去,则整个条纹最终将归入同一组()。然后,很容易按
问题内容: 如何在Python中计算连续字符,以查看每个唯一数字在下一个唯一数字之前重复的次数? 起初,我以为我可以做类似的事情: 这样,我就可以看到每个唯一数字重复的次数。但是,这当然会在达到最后一个值时超出范围。 在上面的示例中,我希望Python告诉我1重复1,而0重复3次。但是,由于我的while语句,上面的代码失败了。 我知道您可以使用内置函数来做到这一点,并且希望采用这种方式的解决方案
问题内容: 有没有一种方法可以获取表示行中NULL字段数的列?这将在SELECT语句中。 例如: 更新:我想要此查询,以便我可以基于给定书的有多少会员销售进行排序。因此,无论哪个会员,拥有3个会员的排名都会比拥有2个会员的排名高。我的数据库中大约有七个会员,并且会不断增长。因此,任何要求指定每个会员字段的查询都可能太长 桌子: Affiliates_Cache- 主键是Affiliate_ISBN
问题内容: 假设我在numpy数组中有一堆数字,并且根据返回布尔数组的条件对它们进行了测试: 并使用此布尔数组,我想计算True连续出现的所有长度。例如,如果我有,我想回去。 我可以使用以下代码来做到这一点: 但是是否已经为此或python,numpy,scipy等函数实现了任何功能,该函数计算给定输入在列表或数组中连续出现的长度? 问题答案: 这是使用的解决方案(可能不是最快的解决方案):
问题内容: 我希望为每个人计算连续的一天咒语。 我的表: 这是我目前拥有的代码: 产生结果: 在我正在寻找这样的结果集的地方: 我需要计算连续1天以上的连续天数。然后将其作为某人拥有多少个连续咒语的总和。例如,弗雷德在这段时间内连续2次生病。如果某人有星期五和星期一休息,我也需要此内容,这应该算作一个连续的咒语。 我对如何到达那里有些迷失。任何帮助将不胜感激。 请参阅:http ://sqlfid
问题内容: 假设我们有以下pandas DataFrame: 如何以 向量化的方式计算 大熊猫的连续数量?我想要这样的结果: 类似于矢量化求和运算的操作,它会在特定条件下重置。 问题答案: 您可以执行以下操作(贷方:如何使用系列/数据框模拟itertools.groupby):