2015-10-24 66 views
0

我的數據庫收集會員續訂信息,包括續約日期(payDate)。活躍成員由payDate列確定,該列必須晚於上一年的9-30被認爲是活躍的。該俱樂部允許會員在上一年的10月份更新。因此,2015年10月續約的會員是2016年12月31日前的一名活躍會員。我遇到的問題是,如果我建立活動會員表,我會得到許多重複條目,因爲當前續約以前的更新在技術上都是活躍的。爲了報告的目的,我只想要最近的更新。只選擇來自數據庫的最新條目

我當前的查詢,這給重複,如下:

SELECT * 
FROM membership 
INNER JOIN memberDues ON ID = memberID 
WHERE payDate >= '$year-10-01' 
ORDER BY lastName, firstName" 

我已經試過這不工作備用查詢:

SELECT * 
FROM membership 
INNER JOIN (SELECT MAX(paydate) AS MAXpayDate 
from memberDues) 
memberDues ON ID = memberID 
AND paydate = MAXpaydate 
WHERE payDate >= '$year-10-01' 
ORDER BY lastName, firstName 

我也試過這樣:

SELECT * 
FROM (SELECT MAX(paydate) 
FROM memberDues) 
memberDues 
INNER JOIN membership ON memberID = ID 
WHERE payDate >= '$year-10-01' 
ORDER BY lastName, firstName 

我將不勝感激任何幫助。

+0

發佈表的一些示例數據? –

回答

1

獲得在'$ year-10-01'之後使用最新payDate付款的會員。

select m.memberID, m.first_name, m.last_name, max(d.payDate) payDate 
from membership m 
join memberDues d on (d.memberId = m.id) 
where d.payDate >= '$year-10-01' 
group by m.id, m.first_name, m.last_name; 

更新:

從成員會費行攫取更多的列值。

select member_id, first_name, last_name, pay_date, amount, check_number from(
select member_id, first_name, last_name, pay_date, amount, check_number, 
     case when @previous = member_id then @rn := @rn + 1 
      when @previous := member_id then @rn := 1 
     end as rn 
from member m 
join memberDues md on (m.id = md.member_id) 
join (select @rn := 0) r 
where md.pay_date >= '$year-10-01' 
order by member_id, pay_date desc 
) q 
where rn = 1; 
+0

謝謝JRD - 這項技術是成功的。 – parboy

+0

JRD:剛剛注意到:雖然報告顯示了「membershipDues」中最新的「payDate」,但其他字段(如「amount」和「check number」)則基於較早的記錄進行報告。任何想法來自兩個不同記錄的字段將如何混合? – parboy

相關問題