我需要一些帮助来整理我的查询,这是我第一次遇到需要一次查询三个表因此我有点迷失。
数据库如下所示:
1[COMPANY] --- <has> --- *[ACCOUNTS]1 --- <has> --- *[PAYMENTS]
Table COMPANY has columns: CompID | CompanyName |
Table ACCOUNTS has columns: AccID | Name | Company |
Table PAYMENTS has columns: PayID | GroupID | PaymentDue | DateDue
其中Company引用CompID和GroupID引用AccID。
我需要:
这就是我的显示效果:
COMPANY | No. of ACCOUNTS | TOTAL DUE | DATE DUE
'Comp 1' | 3 | 10000 | 4/30/2015
'Comp 2' | 2 | 8000 | 4/30/2015
一个接一个地做这个很容易(除了第3个,我不知道如何完成它)但是让它们全部融入这么多条件让我感到困惑。任何人都可以让我大致了解这个案例的查询是什么样的吗?
修改
我只需要支付最接近当前日期的付款,任何不属于“最接近当前日期”的东西都是无关紧要的。
另外,我只需要最接近的UPCOMING日期,所以在当前日期之前的任何内容都被认为是无关紧要的。
答案 0 :(得分:0)
SELECT Company, COUNT(AccID), SUM(PaymentDue), MIN(DateDue)
FROM PAYMENTS JOIN ACCOUNTS
ON PAYMENTS.GroupID = ACCOUNTS.AccID
JOIN COMPANY
ON ACCOUNTS.Company = COMPANY.CompID)
GROUP BY Company
我没有测试过这段代码,但这应该适用于SQLite
答案 1 :(得分:0)
尝试:
select c.compid,
ifnull(count(distinct a.accid),0) as num_accounts,
ifnull(count(*),0) as num_payments
from company c
left join accounts a
on c.compid = a.company
left join ( select p.*
from payments p
join (
select groupid,
min(datedue) as next_due
from payments
where datedue >= date('now');
group by groupid
) v
on p.groupid = v.groupid
and p.date_due = v.next_due
) v
on p.groupid = v.groupid
group by c.compid
当你说:第三个标准对我来说并不完全清楚:
“根据与当前日期最近的日期,公司账户的所有付款总额。”
我将此解释为您只希望与每个帐户关联的最近date_due
相关的付款(相对于当前日期)。换句话说,在此日期之前没有到期付款,也没有在该日期之后到期的付款。