3

我一直在考虑如何编写这个 SQL 查询有一段时间了,但是在考虑了几个小时之后,我想我会问 SO 社区,看看他们是否有任何想法。

这是表格相关部分的模型:

合同

  • ID
  • 日期
  • ar(是/否)
  • 学期

付款

  • 合同编号
  • 付款日期

查询的目的是确定每个月我们预期的付款数量与我们收到的付款数量。

预期付款的条件如果为“是”, 预期付款将在contracts.term几个月后开始。预计付款将持续到第一次错过付款后的一个月。contracts.datecontracts.ar

这还有一个复杂的问题:付款可能会延迟,但它们需要显示为好像在预期日期付款一样。

数据都在那里,但我一直无法理解 SQL 查询。我不是 SQL 专家——我只是有相当多的处理简单查询的经验。如果可能的话,我想避免在代码中过滤结果——但如果没有你的帮助,这可能是我必须做的。

预期产出

Month    Expected Payments    Received Payments
January  500                    450
February 498                    478
March    234                    211
April    987                    789
...

SQL小提琴

我创建了一个 SQL Fiddle:http ://sqlfiddle.com/#!2/a2c3f/2

4

1 回答 1

1

在不写查询的情况下,我可以给你一个大致的想法:在合同表中,date + term以月份为单位,并将结果集按月份分组,其中 ar = 'YES'。这为您提供了预期的付款。

使用第二个表,将 payment_date 转换为月数,并按月对收到的付款数进行分组。

然后,您可以按月加入这两个子结果,以在一个结果集中获取两条信息。

于 2012-10-19T19:18:44.640 回答