当前位置: 首页 > 面试题库 >

递归跟踪客户状态(Presto SQL)

艾俊晖
2023-03-14
问题内容

我有一个表,该表包含我的客户的当前state_id,另一张表包含所有状态及其state_id,但没有相应的customer_id。但是,历史状态表保存了它替换了哪个state_id的信息。因此,应该有可能递归地跟踪客户的状态/旅程。

考虑以下示例:

“客户”表:

customer_id    state_created      current_state_id
1              2017-11-09         33
2              2018-04-01         243
3              2018-07-10         254

“ Historical_state”表:

state_name     replace_state_id   state_id           state_created
State1                            22                 2015-10-08
State1                            211                2017-06-28
State3                            254                2018-07-10
State4         211                243                2018-04-01
State5         22                 33                 2017-11-09

我有兴趣获取每个客户的历史状态信息,即。下表:

customer_id    state_created      state_name       
1              2015-10-00         State1
1              2017-11-09         State5
2              2017-06-28         State1
2              2018-04-01         State4
3              2018-07-10         State3

数据已在AWS的Athena中替换,因此应使用presto sql作为语言。


问题答案:

这是使用联合的一种选择。该查询背后的症结在于,我们生成了一个state_id将customer表加入其中的逻辑列。该表包含state_id给定状态的当前值和替换值。

SELECT
    c.customer_id,
    t.state_created,
    t.state_name
FROM Customer c
INNER JOIN
(
    SELECT state_id, state_name, state_created
    FROM Historical_state
    UNION ALL
    SELECT h1.state_id, h2.state_name, h2.state_created
    FROM Historical_state h1
    INNER JOIN Historical_state h2
        ON h1.replace_state_id = h2.state_id
) t
    ON c.current_state_id = t.state_id;

这是MySQL中的一个演示,因为Rextester不支持SQLite,但至少表明查询逻辑是正确的。

演示版



 类似资料:
  • 我一直在网上看递归(C语言)的例子,试图更好地理解它和它是如何工作的。一般来说,我可以毫无问题地跟踪一些基本的递归问题(比如阶乘问题),但是我发现了这个问题,并且完全不知道如何跟踪它。 这个想法是让用户输入一个变化量,通过使用递归,您打印出可以进行变化量的方式数量。代码如下: 显然,这是递归的常见应用。不过,我无法理解这种递归是如何工作的。对我来说最突出的是,同一条线路上有2个递归调用。我从未见过

  • 上面的代码接受一个整数,并通过将其乘以自己的数字将其减少为一个数字。 例如39。 控制台将记录: 如何跟踪递归函数被调用了3次? 我尝试添加计数器,但无法更新。非常感谢您的帮助

  • 我使用和创建了一个应用程序。在我的应用程序中,每个用户都有多个页面。 我想向用户显示他们页面的访问者的统计数据,比如访问者的数量,设备,国家等等。 这个服务完全符合我想要实现的目标https://11uptime.com/&https://11uptime.com/assets/images/screenshots/webp/status-page-a.webp 正如您所看到的,每个页面都有自己的

  • 第一步,登录niushop商城后台,在设置菜单栏下找到配送管理-->物流配送->物流跟踪设置,提供快递100免费版和企业版两个接口,在后台看见,免费版只需要APPKEY一个参数,企业版需要APPKEY和CUSTOMER两个参数。 如何申请这两个接口?获取这些参数? 第二步,登录快递100官网,注册账号,选择快递接口,进行接口申请。 根据个人需要选择,免费或者企业的接口,填写基本信息,提交。 注意:

  • 1、登录niushop商城后台,在设置菜单栏下找到配送管理-->物流配送->物流跟踪设置,选择快递鸟接口,需要我们填写应用APPID和应用密钥。 2、登录快递鸟 官网,如果有快递鸟账号可以直接登录,没有则需要进行申请注册。 3、登录快递鸟后台,就可以看见需要的APPID和APPKEY,这时还需要我们进行实名认证。 点击上方 用户信息处的“未认证”进行资质认证。 4、认证通过之后,在我的产品服务中选

  • 跟踪行为控制着 Entity Framework Core 是否会在其变更跟踪器里维持实体实例的信息。如果实体是被跟踪的,任何检测到的该实体的变更都将在 SaveChanges() 时持久化到数据库中。Entity Framework Core 还会对已跟踪的、之前已加载到 DbContext 实例中的查询和实体进行相互的导航属性装配。 提示 你可以在 GitHub 上查阅当前文章涉及的代码样例。