我有两张桌子。
“会员”表:
member_id,member_name,voter_id
1,ABC,2
2,Fred,0
(所以,弗雷德是ABC的选民。)
“结算”表:
billing_id,member_id,billing_expiration
1,1,2012
2013年2月1日
3,1,2014
(因此,ABC每年支付三笔款项,并在2014年前支付。)
我希望生成一个包含所有成员的列表,但附加列“expiration”显示其最高值到期时间。但是 - 这是我不知道该怎么做的部分。除了“ABC”显示“2014”作为“到期”之外,我希望“选民”成员显示与为父成员找到的相同的到期值(在这种情况下,Fred也将显示2014年,最高找到的价值)。
AC
######更新到之前的帖子这是sql。它非常缓慢,也因为最高年份没有返回而失败。
select member.*, corp.*, billing.billing_expires from member
left join member as corp
on (corp.voter_id = member.member_id)
left join billing
on (corp.voter_id = billing.member_id)
group by member.member_id
order by billing.billing_expires desc
答案 0 :(得分:0)
我和sqlfiddle玩了一下并提出了这个解决方案:
select m.member_name as memb, c.member_name as corp,
(select max(b.billing_expiration) from billing b
where b.member_id = c.member_id
or b.member_id = m.member_id) as expiration
from member m
left outer join member c on c.voter_id = m.member_id
但是,子选择也可能有点慢 - 取决于表格的大小......