首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查询,使用来自两个不同表的数据计算在一段时间内支付的金额。

SQL查询,使用来自两个不同表的数据计算在一段时间内支付的金额。
EN

Database Administration用户
提问于 2016-05-09 07:33:21
回答 1查看 2.9K关注 0票数 0

有人能告诉我如何为下列问题编写sql查询吗?我无法得到如何写的条件,它选择的user_id,是存在于上述日期,也支付了在过去90天。问题如下:

玩家每天都会出现在游戏中,他/她的user_id和他/她进入游戏的日期被记录在一个表中,比如表数据。它有两列。1. user_id 2.日期

在一个特定的日期,一个球员只能有一个条目(同一天没有多个条目)。然而,同一玩家可以在不同的日期来。

本表有2015年1月1日(即1月1日)以后的数据。下面是此表中的示例条目。

代码语言:javascript
复制
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

玩家可以在同一天和跨天支付多笔款项。

下面是此表中的示例条目。

代码语言:javascript
复制
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查询以生成下表。

代码语言:javascript
复制
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    
EN

回答 1

Database Administration用户

发布于 2016-05-16 21:30:54

这里有一个查询,应该会给出您要寻找的内容。这是Oracle SQL语法,但也可以在其他数据库中使用。

代码语言:javascript
复制
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;

显示的数据:

代码语言:javascript
复制
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'));
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/137962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档