【问题标题】:Recursive Join with table与表递归连接
【发布时间】:2014-08-09 09:24:12
【问题描述】:

我有一个简单的表 tblWorkedHours

ID int,
PayPeriod int,
MonthEnd date,
WorkedHours float,
ContractHours float,
OwedHours float,
PrvsOwedHours float,
FinalOwedHours float

我有两个计算列,分别称为 PrvsOwedHours、FinalOwedHours。

FinaOWedHours = OWedHOurs+PrvsOwedHours.

PrvsOwedHours is the Previous months FinalOwedHours, that is carried forward into the next month.

但是最好的方法是什么...我应该每个月创建一个新表并加入这两个表还是他们的某种递归方式。

恐怕我没有测试数据...

【问题讨论】:

  • 没有测试数据,您永远无法确定解决方案是否有效。
  • 请指定您正在使用哪个 RDBMS - 如果需要递归,则语法会因使用哪个而有很大差异。
  • 另外,在你提出问题之前尝试做出努力。您可以在桌子上摆弄一下,以节省人们试图帮助您的时间。此外,您还可以在沙坑环境中发明一些示例数据。见这里:sqlfiddle.com/#!2/6966f2/1
  • 我尝试过使用简单的数据,但连接生成了一个无限循环,创建了越来越多的记录。我应该解释更多...计算我需要在 PrvsOwedHours 中添加的 FinalOwedHours,但这是上个月的 FinalOwedHours...这些有意义吗?有没有人遇到过这样的事情,如果有,他们是如何解决的?

标签: sql join recursion


【解决方案1】:

大多数数据库都支持窗口函数,其中大多数支持累积和。你可以这样计算:

select t.*,
       sum(OwedHours) over (order by monthend) - OwedHours as PrevOwedHours,
       sum(OwedHours) over (order by monthend) as FinalOwedHours
from table t;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 2017-05-28
    相关资源
    最近更新 更多