是否可以在 presto sql 中执行顺序行计算?

时间:2021-05-21 00:33:30

标签: sql bigdata presto

我有 user_cost 信息和每小时折扣信息。 我正在尝试使用以下两个表来获得以下结果。

每次user_cost都应用discount_per_time,同一时间的用户共享折扣。 折扣按顺序应用于每一行,并一直执行,直到没有更多折扣可用。

我认为可以使用presto的窗口函数,所以我尝试了几天但无法做到。我可以通过查询创建以下结果吗?

表:user_cost

time    user_id     cost
1       aaa         20
1       bbb         5
2       aaa         11
2       bbb         5
3       aaa         15
4       aaa         1
4       bbb         1

表:discount_per_time

discount_id     cost
d-1             10
d-2             5

结果:

time    user_id     type        cost    discount_id     discounted_cost
1       aaa         discount            d-1             10
1       aaa         discount            d-2             5
1       aaa         usage       5                   
1       bbb         usage       5                   
2       aaa         discount            d-1             10
2       aaa         discount            d-2             1
2       bbb         discount            d-2             4
2       bbb         usage       1                   
3       aaa         discount            d-1             10
3       aaa         discount            d-2             5
4       aaa         discount            d-1             1
4       bbb         discount            d-1             1

+ 添加:

  • 您应该能够看到哪些折扣适用于哪些用户以及每次折扣多少。
  • 每次的 discounted_cost 不能大于使用成本和可折扣成本。
  • 如果时间的所有成本都打折了,则不会显示“使用情况”(而是可以通过discounted_cost推断出打折前的值)。

例如

  • 用户 'aaa' 一次使用 20 元,用户 'bbb' 一次使用 5 元。 d-1的10折和d-2的5折都适用于aaa,所以aaa的最终成本变为5。所有的折扣都适用于aaa,所以bbb的最终成本仍然是5。
  • aaa 使用 11,bbb 使用 5。d-1 给 aaa 10 的折扣,d-2 给 1 折扣,所以 aaa 不收费。 d-2 中的 5 个中的 4 个。这可以应用于bbbs。所以 bbb 的最终成本是 1。
  • 当两个用户的成本均为 1 时,仅使用 d-1 中的 10 个中的 2 个进行折扣。两个用户都没有最终用途。

0 个答案:

没有答案