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

是否可以在presto sql中执行顺序行计算?,sql,bigdata,presto,Sql,Bigdata,Presto,我有用户成本信息和小时折扣信息。 我试图得到下面的结果使用下面两个表 每次用户成本都会应用每小时的折扣,同一时间的用户共享折扣。 折扣按顺序应用于每一行,并一直执行,直到没有更多的折扣可用 我认为使用presto的窗口功能是可能的,所以我尝试了几天,但没有成功。我可以通过查询创建以下结果吗 表:用户成本 time user_id cost 1 aaa 20 1 bbb 5 2 aaa 11 2

我有用户成本信息和小时折扣信息。 我试图得到下面的结果使用下面两个表

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

我认为使用presto的窗口功能是可能的,所以我尝试了几天,但没有成功。我可以通过查询创建以下结果吗

表:用户成本

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_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
+加:

  • 您应该能够看到哪些折扣适用于哪些用户以及每次折扣多少
  • 每次的贴现成本不能大于使用成本和可贴现成本
  • 如果对所有时间成本进行了折扣,则不会显示“使用率”(相反,折扣前的值可以通过折扣成本进行推断)
e、 g

  • 用户“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个。这可以应用于BBB。所以bbb的最终成本是1
  • 当两个用户的成本均为1时,仅使用d-1中10个用户中的2个进行折扣。两个用户都没有最终用法

大家好,欢迎光临!你能上传一个简短的可运行版本的代码吗?这将使社区更容易帮助您。示例输出中显示的逻辑目前尚不清楚all@eshirvana我添加了一个条件描述。非常感谢。