【发布时间】:2020-04-11 03:17:49
【问题描述】:
我正在尝试计算自 2020 年 1 月 1 日以来随时间推移的累计收入。我有以下架构的用户级收入数据
create table revenue
(
game_id varchar(255),
user_id varchar(255),
amount int,
activity_date varchar(255)
);
insert into revenue
(game_id, user_id, amount, activity_date)
values
('Racing', 'ABC123', 5, '2020-01-01'),
('Racing', 'ABC123', 1, '2020-01-04'),
('Racing', 'CDE123', 1, '2020-01-04'),
('DH', 'CDE123', 100, '2020-01-03'),
('DH', 'CDE456', 10, '2020-01-02'),
('DH', 'CDE789', 5, '2020-01-02'),
('DH', 'CDE456', 1, '2020-01-03'),
('DH', 'CDE456', 1, '2020-01-03');
预期输出
Game Age Cum_rev Total_unique_payers_per_game
Racing 0 5 2
Racing 1 5 2
Racing 2 5 2
Racing 3 7 2
DH 0 0 3
DH 1 15 3
DH 2 117 3
DH 3 117 3
年龄计算为交易日期与 2020-01-01 之间的差异。 我正在使用以下逻辑
SELECT game_id, DATEDIFF(activity_date ,'2020-01-01') as Age,count(user_id) as Total_unique_payers
from REVENUE
SQL fiddle 如何计算累计收入?
【问题讨论】:
-
Cum_rev是来自SUM(amount)的结果?此外,没有GROUP BY的聚合与 sql_mode=only_full_group_by 不兼容 -
您可以通过
sum(amount) / count(user_id)进行操作 -
年龄应该像这样计算
DATEDIFF(activity_date,'2020-01-01').. 使用逗号代替。 -
您的完整查询是什么 - 包括
GROUP BY?这是a fiddle。您可以在小提琴中编辑查询和测试运行,然后单击更新。生成新链接后,只需将其复制并粘贴到您的问题中即可。谢谢 -
@tcadidot0 的上述建议将有很大帮助。您是否尝试根据每场比赛的最大日期每天生成一条线? (这将对应于年龄列)