仅从数据库中选择最近的条目

时间:2015-10-24 03:38:11

标签: mysql join subquery

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

我将不胜感激。

1 个答案:

答案 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;