按特定阶段计算发生次数

时间:2020-08-11 13:47:09

标签: sql snowflake-cloud-data-platform

我有一张每天晚上运行的桌子的快照,希望获得公司停留在特定阶段的总时间。

即公司A在“销售”中停留了2天。公司B在“销售”中为2天,在“谈判”中为1天。 我不在乎“关闭”的日子,因为那时机会会被赢得。

Name Stage Extract_Date
A    Sales 2020-07-04
A    Sales 2020-07-05
A    Closed 2020-07-06
B    Sales 2020-07-04
B    Sales 2020-07-05
B    Negot 2020-07-06
B    Closed 2020-07-07
B    Closed 2020-07-08
C    Sales 2020-07-04
C    Sales 2020-07-05

我在开始这个过程时已经很完整了,

SELECT Name, Stage, COUNT(Extract_Date)
FROM Table
GROUP BY Name, Stage

还是窗口函数更合适?

1 个答案:

答案 0 :(得分:0)

嗯。 。 。我想你很亲密。假设状态不重复(如您的示例数据中所示):

select name, stage, min(extract_date) as start_date,
       lead(min(extract_date)) over (partition by name order by min(extract_date)) as end_date
from t
group by name, stage;

然后,您可以使用诸如datediff()timestampdiff()之类的适当函数来获得所需的差值。