我需要一些帮助来整理我的查询,这是我第一次遇到一次查询三个表的需要,所以我有点迷路了。
数据库如下所示:
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其中公司引用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 一个接一个地做这件事很容易(除了第三次,我还不知道该怎么做),但是把它们一条条地和这么多条件一起做是让我很困惑的。有人能给我一个关于这个案例的查询会是什么样子的一般概念吗?
编辑
我只需要用最近的日期,任何不属于“最近的日期”的付款都是无关紧要的。
另外,我只需要最近的日期,所以在当前日期之前的任何事情都被认为是不相关的。
发布于 2015-04-19 16:08:56
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
发布于 2015-04-19 16:18:24
尝试:
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相关联的付款(相对于当前日期)。换句话说,在该日期之前没有到期的付款,也没有在该日期之后到期的付款。
https://stackoverflow.com/questions/29732030
复制相似问题