我有以下结构的表:use_id (int) - event (str) - time (timestamp) - value (int)
事件可以采取几个值:安装,登录,购买等。
我需要更新应用程序之前获得所有用户的记录。我的应用程序的发布的例子时刻 - 2019 1月1日,但用户可能在任何一天安装新版本。
我怎样才能sum(value)
由第一和第二版本。 ---------
我试图自连接表,但我认为这不是最好的解决办法。
请帮帮我。
这是你的表的定义(因为我从你的意见,并说明可以理解它):
CREATE TABLE user_events (
user_id integer,
event varchar,
time timestamp without time zone,
value integer
);
这是你要的查询:
SELECT
COUNT(user_id),
SUM(value)
FROM (
SELECT
DISTINCT ON (user_id)
user_id,time,value
FROM user_events
WHERE event='install'
ORDER BY user_id, time DESC
) last_installations
WHERE
time BETWEEN date '2018-01-01' AND date '2019-01-01';
几点说明:
last_installations
)选择最后安装的事件为每个用户SUM(value)
(如你问)和COUNT(user_id)
(我加为清楚起见 - 有多少用户正在使用1和2的版本现在)通过版本的所有事件和值
SELECT
event,
CASE
WHEN time BETWEEN date '2018-01-01' AND timestamp '2018-05-30 23:59:59' THEN 1
WHEN time BETWEEN date '2018-06-01' AND timestamp '2018-12-31 23:59:59' THEN 2
WHEN time > date '2018-01-01' THEN 3
ELSE 0 -- unknown version
END AS version,
SUM(value)
FROM user_events
GROUP BY 1,2