我有三列,store_id、opening_date 和终止_date。
我想编写一个执行此操作的查询:
特定日期之前终止的商店总数 ÷ 该特定日期之前开业的商店总数
这将为我提供当时已关闭的已开业商店总数的比例。
我想计算从第一家商店开业到今天的每个日期的范围。
我意识到,为了做到这一点,我必须除以两个运行总计(每家曾经终止的商店的运行总计÷每家曾经开业的商店的运行总计),这已被证明是相当困难的。
这是我到目前为止得到的代码
结果表如下所示,其中商店总数仅为 1,2,3,4,5 ....(这不正确/我想要的),并且结果分数也不正确。然而,已终止商店的运行总和是正确的。
我一直在努力解决这个问题一段时间,谢谢你的帮助!
不要计算 id。由于您不想将空值计为终止,请改用日期列。您还需要指定首先对空值进行排序:
sum(count(churn_date))
over (order by churn_date nulls first
range between unbounded preceding and current row
) * 1.00 as terminated_stores
您需要避免整数除法,因此在计算百分比之前将分子转换为小数值。我更改为
range between
,以便它将具有相同时间戳的所有商店开业(关闭)一起计数。而且你也必须避免被零除:
sum(count(close_dt)) over (
order by close_dt asc nulls first
range between unbounded preceding and current row
) * 1.00 /
nullif( sum(count(open_dt)) over (
order by open_dt asc
range between unbounded preceding and current row
), 0) as pct