Select 只有数据库中的最新条目
Select only most recent entries from database
我的数据库收集会员续订信息,包括续订日期 (payDate)。活跃成员由 payDate 列确定,该列必须晚于上一年的 9-30 才能被视为活跃。俱乐部允许会员最早在前一年的 10 月续约。因此,2015 年 10 月续订的会员在 2016 年 12 月 31 日之前都是活跃会员。我遇到的问题是在 10 月到 12 月期间,如果我建立 table 个活跃会员,我会得到很多重复的条目因为本次续约和之前的续约在技术上都是活跃的。出于报告的目的,我只想要最近的更新。
我当前的查询,给出了重复项,如下:
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
如有任何帮助,我将不胜感激。
获取最近付款日期为“$year-10-01”之后付款的会员。
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;
我的数据库收集会员续订信息,包括续订日期 (payDate)。活跃成员由 payDate 列确定,该列必须晚于上一年的 9-30 才能被视为活跃。俱乐部允许会员最早在前一年的 10 月续约。因此,2015 年 10 月续订的会员在 2016 年 12 月 31 日之前都是活跃会员。我遇到的问题是在 10 月到 12 月期间,如果我建立 table 个活跃会员,我会得到很多重复的条目因为本次续约和之前的续约在技术上都是活跃的。出于报告的目的,我只想要最近的更新。
我当前的查询,给出了重复项,如下:
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
如有任何帮助,我将不胜感激。
获取最近付款日期为“$year-10-01”之后付款的会员。
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;