【问题标题】:SQL find groups based on time rangesSQL 根据时间范围查找组
【发布时间】:2019-01-03 06:09:44
【问题描述】:

我有一个包含以下列的表格:

  • Purchase_ID (varchar)
  • User_ID (varchar)
  • Purchase_time (bigint) - 在 UNIX 中

与其他一些不太相关的。

有超过 6 万个唯一购买 ID。 所有不同的 User_ID 至少出现 4 次(通常更多) - 这意味着这些用户至少进行了 4 次购买。

我想做的是找到在相似时间范围内进行购买的用户 ID 组。 例如,以用户 A 为例,在用户 A 每次购买前后一小时内找到所有其他已购买的用户,然后将这两个用户,重复该过程,直到达到可能的最大用户数一起购买。 连接群内所有成员的购买量不少于3次。

我意识到这有点复杂,可能会导致许多不同的表格,但我不知道如何着手解决这个问题,因此我们将不胜感激。

感谢所有帮助者,祝您有愉快的一天!

编辑:

  • 就数据库标签而言,我使用的是 AWS Athena,我不确定它支持哪些功能,因为我对它完全陌生。

  • 样本数据:

User ID   Time
User_A    1521441850
User_B    1521441930
User_C    1521500000
User_D    1521530023
User_E    1521441900
User_F    1521000000
User_A    1521445850
User_B    1521445980
User_C    1521510000
User_D    1521520055
User_E    1521445100
User_F    1521000010
User_A    1521449850
User_B    1521445030
User_C    1521520000
User_D    1521500033
User_E    1521441910
User_F    1521000020
User_A    1521453850
User_B    1521441920
User_C    1521530000
User_D    1521540000
User_E    1521400000
User_F    1521000030
  • 期望的结果: 我对此很灵活,但基本上可能是这样的:

表 1

Group1    Group2
User_A    User_C
User_B    User_D
User_E

表 2

Group Name    Amount of Users Amount of Purchases Linked
Group1        3               11
Group2        2               8

【问题讨论】:

  • 样本数据、所需结果和数据库标签都会有所帮助。
  • 答案在很大程度上是特定于数据库的,但它非常简单。所以,有两个问题:1)什么是数据库? 2) 你能发布你的表的索引吗?
  • 问题陈述是递归的。 AFAIK,Presto(Athena 在后台)不支持递归构造。

标签: sql amazon-web-services amazon-athena presto


【解决方案1】:

哪个数据库?

您需要了解 Unix 时间的工作原理,以便使用它来解决您感兴趣的两小时范围。

为您的数据库查找 OLAP 函数。如果可用,LAG 和 LEAD 功能可能会对您有所帮助。如果它们在您的实现中不可用,则可以使用更常见的 OLAP 函数来模拟它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-03
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    相关资源
    最近更新 更多