如果在过去2个月内创建第一个钱包的人,我怎样才能获得所有钱包的金额?
我创建了一个SQL小提琴来说明这些表。欢迎您使用它来查看和运行SQL。 My table schema and sample data
表模式和示例数据的描述如下。
我有2张桌子。第一个名为wallet
,其中包含wallet_id
,wallet_owner_id
,create_date
列。我们有许多钱包拥有者,每个钱包拥有者可以拥有多个钱包。 create_date
表示钱包创建的时间。 wallet_id
和wallet_owner_id
都是唯一的。
e.g。
create table wallet(wallet_id int,wallet_owner_id varchar(20),create_date date);
insert into wallet values
(100000010,'AAAAAAAAAAAAAAA','2017-09-02'),
(100000034,'AAAAAAAAAAAAAAA','2018-06-02'),
(100000132,'BBBBBBBBBBBBBBB','2017-05-03'),
(100001110,'CCCCCCCCCCCCCCC','2018-05-02'),
(100000345,'CCCCCCCCCCCCCCC','2018-05-06');
第二个表名为deposit
,其中包含wallet_owner_id
,check_date
,amount_in_all_wallets
列。 wallet owner
ckeck date
只有一行
e.g。
create table deposit (amount_in_all_wallets int,wallet_owner_id varchar(20),check_date date);
insert into deposit values
(45,'AAAAAAAAAAAAAAA','2018-06-01'),
(89,'BBBBBBBBBBBBBBB','2018-06-01'),
(97,'CCCCCCCCCCCCCCC','2018-06-01'),
(11,'CCCCCCCCCCCCCCC','2018-06-02');
因为AAAAAAAAAAAAAAA和BBBBBBBBBBBBBBB都在过去2个月之前创建了钱包,我的结果应该是
amount_in_all_wallets|wallet_owner_id|check_date|first_create_date
97 |CCCCCCCCCCCCCCC|2018-06-01|2018-05-02
11 |CCCCCCCCCCCCCCC|2018-06-02|2018-05-02
查询:
SELECT d.amount_in_all_wallets, d.wallet_owner_id, d.check_date, min(d.create_date) as first_create_date
FROM deposit d
JOIN wallet w ON d.wallet_owner_id = w.wallet_owner_id
WHERE w.create_date > '2018-05-01'
这是行不通的,因为我无法找到一种方法来融入“在过去2个月内创建他们的第一个钱包”的想法。我怎么能这样做?
答案 0 :(得分:2)
您可以为INNER JOIN
添加另一个检查所需日期的条件:
SELECT amount_in_all_wallets,
w.wallet_owner_id,
check_date,
MIN(w.create_date) AS first_create_date
FROM wallet w
JOIN deposit d ON w.wallet_owner_id = d.wallet_owner_id
AND DATE_SUB(NOW(), INTERVAL 2 MONTH) <=
(SELECT MIN(create_date)
FROM wallet
WHERE wallet_owner_id = w.wallet_owner_id)
GROUP BY amount_in_all_wallets,
w.wallet_owner_id,
check_date
答案 1 :(得分:1)
你可以试试这个:
select *
from deposit d join (
select wallet_owner_id, min(create_date) create_date from wallet
group by wallet_owner_id
having min(create_date) >= date_add(now(), interval -2 month)
) w on w.wallet_owner_id = d.wallet_owner_id;