0

我有两张桌子。

“成员”表:

member_id、member_name、voter_id

1、ABC、2

2,弗雷德,0

(所以,弗雷德是 ABC 的选民。)

“计费”表:

billing_id、member_id、billing_expiration

2012 年 1 月 1 日

2013 年 2 月 1 日

2014 年 3 月 1 日

(因此,ABC 每年支付了三笔款项,并支付到 2014 年。)

我正在寻找生成所有成员的列表,但有一个额外的列“到期”,显示他们的最高值到期时间。但是 - 这是我不知道该怎么做的部分。除了“ABC”将“2014”显示为“过期”之外,我希望“投票人”成员显示与父成员相同的过期值(在这种情况下,Fred 也会显示 2014,最高找到的值)。

交流电

###### 更新到之前的帖子

这里是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 
4

1 回答 1

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

不过,子选择也可能有点慢 - 取决于表格的大小......

于 2013-09-07T04:53:31.820 回答