查找未在旧订阅阈值内重新订阅的订阅者
Find subscribers who did not resubscribe within threshold of old subscription
我在 PostgreSQL 10.5 中有 table 个订阅:
id user_id starts_at ends_at
--------------------------------
1 233 02/04/19 03/03/19
2 233 03/04/19 04/03/19
3 296 02/09/19 03/08/19
4 126 02/01/19 02/28/19
5 126 03/01/19 03/31/19
6 922 02/22/19 03/22/19
7 111 01/22/19 02/21/19
8 111 02/22/19 03/21/19
我想看看 user_ids 没有在 3 月订阅结束后 2 天内开始订阅的人。对于订阅将于 3 月结束的用户。
鉴于上面的 table,结果将是:
user_id
-------
296
126
922
111
我如何将 3 月的查询放在一起?
不存在应该做你想做的:
select t.*
from t
where ends_at >= '2019-03-01' and ends_at < '2019-04-01' and
not exists (select 1
from t t2
where t2.user_id = t.user_id and
t2.starts_at >= t.ends_at and
t2.starts_at <= t.ends_at + interval '2 day'
);
我在 PostgreSQL 10.5 中有 table 个订阅:
id user_id starts_at ends_at
--------------------------------
1 233 02/04/19 03/03/19
2 233 03/04/19 04/03/19
3 296 02/09/19 03/08/19
4 126 02/01/19 02/28/19
5 126 03/01/19 03/31/19
6 922 02/22/19 03/22/19
7 111 01/22/19 02/21/19
8 111 02/22/19 03/21/19
我想看看 user_ids 没有在 3 月订阅结束后 2 天内开始订阅的人。对于订阅将于 3 月结束的用户。
鉴于上面的 table,结果将是:
user_id
-------
296
126
922
111
我如何将 3 月的查询放在一起?
不存在应该做你想做的:
select t.*
from t
where ends_at >= '2019-03-01' and ends_at < '2019-04-01' and
not exists (select 1
from t t2
where t2.user_id = t.user_id and
t2.starts_at >= t.ends_at and
t2.starts_at <= t.ends_at + interval '2 day'
);