我有三个表:复杂的SQL查询
Sender
| SenderKey | SenderGUID |
|-----------|------------|
| 1 | 100 |
| 2 | 101 |
Payment
| SenderKey | PaymentGUID | Date | Amount |
|-----------|-------------|------------|------------|
| 1 | 100 | 2015-03-09 | 4500 |
| 2 | 101 | 2016-07-12 | 6000 |
Credit
| SenderKey | Amount | Date |
|-----------|------------|------------|
| 1 | 1000 | 2015-04-11 |
| 2 | 3000 | 2016-06-03 |
我需要提交一个SQL查询,将产生以下结果:
| SenderGUID | PaymentCount | CreditSum |
|------------|------------------|-----------------|
| 100 | 1 | 1000 |
| 101 | 2 | 4500 |
凡PaymentCount
代表提出的所有款项发件人并且应该1)仅计算在2015-03-10
之后支付第一张的发件人; 2)已经支付超过一次。
反过来,CreditSum
占2015-03-10
的信用额。
我提出以下查询来计算PaymentCount:
SELECT Payment.SenderKey, COUNT(Payment.PaymentGuid)
FROM Payment
WHERE (Payment.Date BETWEEN '2015-03-10' and NOW()) GROUP BY Payment.SenderKey
HAVING COUNT(Payment.PaymentGuid) > 1;
但是,我不知道如何占第一的条件。它似乎必须使用循环完成,但我不确定如何在SQL中使用这些。
谢谢。
代码显然是MySQL,所以我删除了SQL Server的标签。 –
Alexey,请确认您的RDMS,它是您原本在标签中使用的MySQL或SQL Server。 – andrews
我不明白这一点。您显示了两个不同发件人的付款记录。您只需要发送多次付款的发件人。对于所有发件人都是如此,所以我期望得到一个空的结果,但结果显示两行。那么你只需要在2015-03-10之后首次付款的发件人。这仅适用于发件人2.为什么发件人1在您的结果中呢?然后对于发件人2,您有付款= 6000,贷记= 3000。您如何获得4500的结果CreditSum? –