我的数据库收集会员续订信息,包括续订日期(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)
获得在“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;