当前位置: 首页 > 知识库问答 >
问题:

添加变量以计算连续月份

殳阳飙
2023-03-14

我在Postgres数据库中有一个查询,它结合了客户端订阅。

我想添加一个称为“连续月份”的变量,但我不确定在Postgres中如何添加。

我的原始桌子是这样的:

我希望有一个连续数月的东西,比如:

谢谢你在先进的帮助!

共有2个答案

雷浩思
2023-03-14

根据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

糜征
2023-03-14

看来你有自己的差距和岛屿类型的问题。

诀窍是根据每个客户的连接日期计算一些排名。

然后可以根据客户和排名计算序列号。

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

分贝

 类似资料:
  • 问题内容: 如何在Python中计算连续字符,以查看每个唯一数字在下一个唯一数字之前重复的次数? 起初,我以为我可以做类似的事情: 这样,我就可以看到每个唯一数字重复的次数。但是,这当然会在达到最后一个值时超出范围。 在上面的示例中,我希望Python告诉我1重复1,而0重复3次。但是,由于我的while语句,上面的代码失败了。 我知道您可以使用内置函数来做到这一点,并且希望采用这种方式的解决方案

  • 问题内容: 有没有一种方法可以获取表示行中NULL字段数的列?这将在SELECT语句中。 例如: 更新:我想要此查询,以便我可以基于给定书的有多少会员销售进行排序。因此,无论哪个会员,拥有3个会员的排名都会比拥有2个会员的排名高。我的数据库中大约有七个会员,并且会不断增长。因此,任何要求指定每个会员字段的查询都可能太长 桌子: Affiliates_Cache- 主键是Affiliate_ISBN

  • 问题内容: 感谢Mike提出的添加创建/插入语句的建议。 我想添加一个新列,即“当前条纹天数”,因此 结果 如下所示: 但我不知道如何将技巧与其他窗口功能结合使用以获取正确的结果。 问题答案: 在此表上构建(不使用SQL关键字“ date”作为列名。): 询问: 从另一个减去a得到一个。由于您一直在寻找连续的日子,因此下一行将增加 一 。如果从中减去,则整个条纹最终将归入同一组()。然后,很容易按

  • 问题内容: 假设我在numpy数组中有一堆数字,并且根据返回布尔数组的条件对它们进行了测试: 并使用此布尔数组,我想计算True连续出现的所有长度。例如,如果我有,我想回去。 我可以使用以下代码来做到这一点: 但是是否已经为此或python,numpy,scipy等函数实现了任何功能,该函数计算给定输入在列表或数组中连续出现的长度? 问题答案: 这是使用的解决方案(可能不是最快的解决方案):

  • 问题内容: 我希望为每个人计算连续的一天咒语。 我的表: 这是我目前拥有的代码: 产生结果: 在我正在寻找这样的结果集的地方: 我需要计算连续1天以上的连续天数。然后将其作为某人拥有多少个连续咒语的总和。例如,弗雷德在这段时间内连续2次生病。如果某人有星期五和星期一休息,我也需要此内容,这应该算作一个连续的咒语。 我对如何到达那里有些迷失。任何帮助将不胜感激。 请参阅:http ://sqlfid

  • 我在这里试图实现的是,当用户选择ComboBox中的数据时,它会将其与我的HashMap匹配,并将其添加到ArrayList中。 代码有效。输出为: (用户从组合框中选择了 LOTR 1) 但是当我再次单击该按钮时,ArrayList会重置。我想要的是让ArrayList继续添加数据而不替换初始数据,即使它是重复的。例如: 基本上,用户可以从ComboBox中选择无数次,ArrayList不断添加