有人能告诉我如何为下列问题编写sql查询吗?我无法得到如何写的条件,它选择的user_id,是存在于上述日期,也支付了在过去90天。问题如下:
玩家每天都会出现在游戏中,他/她的user_id和他/她进入游戏的日期被记录在一个表中,比如表数据。它有两列。1. user_id 2.日期
在一个特定的日期,一个球员只能有一个条目(同一天没有多个条目)。然而,同一玩家可以在不同的日期来。
本表有2015年1月1日(即1月1日)以后的数据。下面是此表中的示例条目。
user_id date
1001 6/1/2015
1002 6/1/2015
1003 6/1/2015
1001 6/2/2015
1002 6/2/2015
1004 6/2/2015
1002 6/3/2015
1003 6/3/2015
1005 6/3/2015而且,每次玩家在游戏中付款时,当他/她付款时,他/她的user_id和时间戳都记录在一个表中,比如表支付。它有两列。1. user_id 2. payment_timestamp
玩家可以在同一天和跨天支付多笔款项。
下面是此表中的示例条目。
user_id payment_timestamp
1001 6/1/2015 07:00
1001 6/1/2015 07:30
1002 6/1/2015 10:00
1001 6/2/2015 13:50
1002 6/2/2015 08:00
1004 6/2/2015 09:00
1003 6/3/2015 10:00
1005 6/3/2015 08:30我们对某一特定日期,例如2015年6月1日的90天付款人数据定义如下:
计数(2015年6月1日到2015年6月1日,并在最后90天内支付了至少一笔款项的玩家,即2015年4月3日至2015年6月1日)
同样,2015年6月2日的90天付款人数据为:
点票(2015年6月2日到2015年6月2日,并在最后90天内支付了至少一笔款项的玩家,即2015年5月3日至2015年2月6日)
使用DAU表和支付表,请编写SQL查询以生成下表。
Date 90_Day_Payer DAU
6/1/2015
6/2/2015
6/3/2015
6/4/2015
6/5/2015
6/6/2015
6/7/2015 发布于 2016-05-16 21:30:54
这里有一个查询,应该会给出您要寻找的内容。这是Oracle SQL语法,但也可以在其他数据库中使用。
SELECT dau.datetime, count(*) FROM DAU
WHERE EXISTS (select 1 from Payer
WHERE Payer.user_id=DAU.user_id
AND Payer.payment_timestamp BETWEEN trunc(dau.datetime)-90 AND trunc(DAU.datetime))
GROUP BY dau.datetime
ORDER BY DateTime;显示的数据:
create table Payer as (select 1001 user_id, to_date('06/01/2015 07:00','MM/DD/YYYY HH24:MI') payment_timestamp from dual);
insert into Payer values (1001, to_date('06/01/2015 07:30','MM/DD/YYYY HH24:MI'));
insert into Payer values (1002, to_date('06/01/2015 10:00','MM/DD/YYYY HH24:MI'));
insert into Payer values (1001, to_date('06/02/2015 13:50','MM/DD/YYYY HH24:MI'));
insert into Payer values (1002, to_date('06/02/2015 08:00','MM/DD/YYYY HH24:MI'));
insert into Payer values (1004, to_date('06/02/2015 09:00','MM/DD/YYYY HH24:MI'));
insert into Payer values (1003, to_date('06/03/2015 10:00','MM/DD/YYYY HH24:MI'));
insert into Payer values (1005, to_date('06/03/2015 08:30','MM/DD/YYYY HH24:MI'));
create table DAU as (select 1001 user_id, to_date('06/01/2015','MM/DD/YYYY') datetime from dual);
insert into DAU values (1002, to_date('06/01/2015','MM/DD/YYYY'));
insert into DAU values (1003, to_date('06/01/2015','MM/DD/YYYY'));
insert into DAU values (1001, to_date('06/02/2015','MM/DD/YYYY'));
insert into DAU values (1002, to_date('06/02/2015','MM/DD/YYYY'));
insert into DAU values (1004, to_date('06/02/2015','MM/DD/YYYY'));
insert into DAU values (1002, to_date('06/03/2015','MM/DD/YYYY'));
insert into DAU values (1003, to_date('06/03/2015','MM/DD/YYYY'));
insert into DAU values (1005, to_date('06/03/2015','MM/DD/YYYY'));https://dba.stackexchange.com/questions/137962
复制相似问题