【发布时间】:2021-12-31 09:49:06
【问题描述】:
提示问题
编写一个查询来识别返回的活跃用户。返回活跃用户是指在任何其他购买后的 7 天内进行了第二次购买的用户。输出这些返回活跃用户的 user_id 列表。
CREATE TABLE amazon_transactions(
id int,
user_id int,
itemvar char,
created_at datetime,
revenue int
)
我的解决方案如下。我得到了一个部分正确的答案。有许多不应该存在的用户 ID。 谁能告诉我我的解决方案出了什么问题?
select
user_id
from
amazon_transactions t1
where
7 < ANY(
select
ABS( DATEDIFF( t1.created_at, t2.created_at ) )
from
amazon_transactions t2
where
t2.user_id = t1.user_id
);
【问题讨论】:
-
请使用您的查询和示例数据将 linq 发布到 DbFiddle 或 SqlFiddle。
-
看起来完全错误。你为什么使用
8 <?这肯定会找到时间间隔为至少 8 天的用户吗?不是“7 以内”。您还需要考虑不要将交易与自身进行比较。并考虑性能。窗口函数可以更高效吗? -
感谢您指出。 8 是一个错字。我正在使用 7 运行查询
-
开发人员对自己的代码存在盲点。我们一直在为此奋斗。尝试创建一个小测试用例来测试您的查询。尽量避免提出可以通过“只看结果”来回答的问题。我们有时无法让自己简单地观察行为,因为“我们只知道它是正确的,而不是观察”。
-
@MartinSmith MySql 文档dev.mysql.com/doc/refman/8.0/en/any-in-some-subqueries.html 说它评估为
TRUE或FALSE或UNKNOWN。