Sql 查找值在特定日期范围内但不在其他日期范围内的人
我正在查询一个基于用户的数据库,并试图找到仅在某个日期范围内进行购买的人 e、 g: 将仅在Sql 查找值在特定日期范围内但不在其他日期范围内的人,sql,subquery,Sql,Subquery,我正在查询一个基于用户的数据库,并试图找到仅在某个日期范围内进行购买的人 e、 g: 将仅在'2017-7-01'和'2017-08-01'之间购买但此后未购买的所有人员带回 我试过: select payment_id from table1 where created_at between '2017-7-01' and '2017-08-01' and not between '2017-7-01' and '2017-08-01';
'2017-7-01'
和'2017-08-01'
之间购买但此后未购买的所有人员带回
我试过:
select payment_id
from table1
where created_at between '2017-7-01'
and '2017-08-01'
and not between '2017-7-01' and '2017-08-01';
还有各种各样的变化。
我想这里应该有一个子查询,但我真的不知道如何处理
希望有人能帮忙:)
感谢使用条件
COUNT()
查看用户是否在该日期范围内有任何购买,并且在上限范围后没有购买
此外,您还需要一些与用户相关的内容,我猜user\u id
,这样您就可以对所有内容进行分组
SELECT user_id
FROM yourTable
GROUP BY user_id
HAVING COUNT(CASE WHEN created_at between '2017-07-01'
and '2017-08-01'
THEN 1
END) > 0
AND COUNT(CASE WHEN created_at > '2017-08-01'
THEN 1
END) = 0
使用conditional
COUNT()
查看用户是否在该日期范围内有任何购买,并且在上限范围之后没有购买
此外,您还需要一些与用户相关的内容,我猜user\u id
,这样您就可以对所有内容进行分组
SELECT user_id
FROM yourTable
GROUP BY user_id
HAVING COUNT(CASE WHEN created_at between '2017-07-01'
and '2017-08-01'
THEN 1
END) > 0
AND COUNT(CASE WHEN created_at > '2017-08-01'
THEN 1
END) = 0
如果要筛选确保最大(日期)小于2017-08-01,则可以使用
分组依据和拥有
前
选择付款\u id
来自表1
在“2017-07-01”和“2017-08-01”之间创建
按付款id分组
最大(创建时间)<'2017-08-01'——比要求日期短的最近日期
如果您想过滤以确保最大(日期)小于2017-08-01,那么您可以使用分组依据和拥有
前
选择付款\u id
来自表1
在“2017-07-01”和“2017-08-01”之间创建
按付款id分组
最大(创建时间)<'2017-08-01'——比要求日期短的最近日期
您还需要将在“2017-7-01”和“2017-08-01”之间而不是在“2017-7-01”和“2017-08-01”之间创建的_更改为在“2017-7-01”和“2017-08-01”之间创建的_,并在“2017-7-01”和“2017-08-01”之间创建的_,向我们显示数据库模式、样本数据、,当前和预期输出。请阅读,这里是学习如何提高问题质量和获得更好答案的好地方。尝试在“我很接近”中创建一个示例:)非常感谢。您还需要将在“2017-7-01”和“2017-08-01”之间而不是在“2017-7-01”和“2017-08-01”之间创建的_更改为在“2017-7-01”和“2017-08-01”之间创建的_,并在“2017-7-01”和“2017-08-01”之间创建的_显示数据库模式、样本数据,当前和预期输出。请阅读,这里是学习如何提高问题质量和获得更好答案的好地方。尝试在“我很接近”中创建一个示例:)非常感谢。那不行。因为在内部查询中,您已经过滤了任何无效的日期>“2017-08-01”
。因为在内部查询中,您已经过滤了任何日期>“2017-08-01”
谢谢!对于每个用户创建的最大值,这是吗?它是按付款id分组的,因此它是付款id的最大值(创建的)。在发布代码之前,我使用临时表对此进行了测试,它给出了预期的结果。这取决于付款id代表什么,或者您是否需要用户id。。。你在帖子中从来没有提到过用户id,我现在看到了一些关于用户id的答案。如果是这样,应该是选择用户id
,以及按用户id分组。没问题,很高兴提供帮助。谢谢!对于每个用户创建的最大值,这是吗?它是按付款id分组的,因此它是付款id的最大值(创建的)。在发布代码之前,我使用临时表对此进行了测试,它给出了预期的结果。这取决于付款id代表什么,或者您是否需要用户id。。。你在帖子中从来没有提到过用户id,我现在看到一些关于用户id的答案。如果是这样,应该是选择用户id
,以及按用户id分组
。没问题,很乐意帮助。
Select userid
From table1
Where userid not in (select userid from table1 where createdat between @startdate and @enddate)
Where createdat > @enddate
select payment_id
from table1
where created_at between '2017-07-01' AND '2017-08-01'
GROUP BY payment_id
HAVING MAX(created_at) < '2017-08-01' --most recent date less than requested date