Postgresql - 在没有时间戳的情况下随时间汇总指标?

时间:2018-06-12 13:05:47

标签: postgresql time-series analytics

非常感谢您抽出宝贵的时间!

我不确定我是否使用正确的词语来表达我想要描述的内容,但我会尝试一下。

我们希望我们的用户在多个不同日期执行特定操作(游戏),因此我们计算在1,2或更多日期执行此操作的百分比。但是,我们真正想要的是看看我们是否随着时间的推移改进了这个指标。

我有以下SQL:

WITH CTE_challenges AS (
SELECT 
distinct c.userid,
Count(distinct DATE(c.createdat)) AS dates
FROM 
"challenges"."game_user" as c

INNER JOIN
"challenges"."game" AS g
ON g.id = c.gameid

WHERE 
c.userid NOT IN (SELECT id FROM "public"."non_users")
AND
g.status = 'ended'
GROUP by
c.userid
)

SELECT 
        count(distinct CASE WHEN 
                    dates = 1 
                    THEN c.userid
                    ELSE NULL end) / count(distinct c.userid)::float 
AS one_date,
        count(distinct CASE WHEN 
                    dates = 2 
                    THEN c.userid
                    ELSE NULL end) / count(distinct c.userid)::float 
AS two_dates,
        count(distinct CASE WHEN 
                    dates > 2 
                    THEN c.userid
                    ELSE NULL end) / count(distinct c.userid)::float 
AS more_dates
FROM
CTE_challenges AS c
  • CTE加入是为了过滤掉未结束的游戏。

此代码导致:

One Date    Two Dates    More Dates
0.67         0.2          0.13

我还没有找到一种方法来获得这样的列表:

Date    One Date    Two Dates    More Dates
12/6    0.67         0.2          0.13
13/6    0.68         0.18         0.14
... 

我们正在使用Redshift,因此generate_series不是一个选项。此外,我正在考虑一个窗口功能,但还没有能够正确应用它。

哦,请让我知道一个更好的名称或标签,以便让更多人找到它!

编辑:

在问题后添加一些信息。 因此,我们希望了解每天玩过1,2或更多游戏的用户百分比,而不仅仅是直到现在。我们希望这样,因为我们正在进行更改,旨在提高(更高)在不同日期玩游戏的用户的百分比。一种表达方式可能是:

"在每个日期,有%的用户在' 1',' 2'和更多'单独的日期,直到那个日期为止#34;。

这是我们的game_user表:enter image description here

0 个答案:

没有答案