gpt4 book ai didi

MySQL查询以查找最近的成员

转载 作者:行者123 更新时间:2023-11-30 22:12:28 25 4
gpt4 key购买 nike

我有两个 MySQL 表 memberships 和 member_cards。每个membership & member card可以有三种状态。

  • 事件 = 开始日期 <= 今天 <= 结束日期
  • future = 今天 < 开始日期
  • 过期 = end_date <今天

成员(member)表

id--------membership_number--------start_date-------------end_date
1--------**123**--------------------------------09-20-2014-----------09-20-2015
2--------**123**--------------------------------09-20-2015-----------09-20-2016
3--------**123**--------------------------------09-20-2016-----------09-20-2017
4--------**123**--------------------------------09-20-2017-----------09-20-2018
5--------**456**--------------------------------09-20-2013-----------09-20-2014
6--------**456**--------------------------------09-20-2014-----------09-20-2015

成员(member)卡

id--------membership_id-------------start_date-------------end_date
1--------**1**--------------------------------09-20-2014-----------05-15-2015
2--------**1**--------------------------------09-20-2014-----------09-20-2015
3--------**2**--------------------------------09-20-2015-----------05-13-2016
4--------**2**--------------------------------09-20-2015-----------09-20-2016
5--------**3**--------------------------------09-20-2016-----------09-21-2016 (past)
6--------**3**--------------------------------09-20-2016-----------05-15-2017
7--------**3**--------------------------------09-20-2016-----------09-20-2017
8--------**4**--------------------------------09-20-2017-----------05-13-2017
9--------**4**--------------------------------09-20-2017-----------09-20-2018
10-------**5**--------------------------------09-20-2013-----------05-13-2014
11-------**5**--------------------------------09-20-2013-----------09-20-2014
12------**6**--------------------------------09-20-2014-----------05-13-2015
13-----**6**--------------------------------09-20-2014-----------09-20-2015

我要找回

  1. 所有活跃的 + future 的成员(member)资格 +(如果特定成员(member)号码没有活跃的或 future 的成员(member)资格,最后过期的记录)

结果:

id--------membership_number--------start_date-------------end_date
3--------**123**--------------------------------09-20-2016-----------09-20-2017
4--------**123**--------------------------------09-20-2017-----------09-20-2018
6--------**456**--------------------------------09-20-2014-----------09-20-2015
  1. 有效卡+(如果成员(member)已过期,则与该成员(member)绑定(bind)的所有卡)

结果:

id--------membership_id-------------start_date-------------end_date
6--------**3**--------------------------------09-20-2016-----------05-15-2017
7--------**3**--------------------------------09-20-2016-----------09-20-2017
8--------**4**--------------------------------09-20-2017-----------05-13-2017
9--------**4**--------------------------------09-20-2017-----------09-20-2018
12------**6**--------------------------------09-20-2014-----------05-13-2015
13-----**6**--------------------------------09-20-2014-----------09-20-2015

每个表包含大约 200k 条记录。我正在尝试使用 UNION 使用单个 MySQL 查询来执行第二个查询(对于 member_cards)。有没有更好的方法?

最佳答案

如前所述,您的问题有点不清楚,但我编写了一个查询,可根据第一个目标表返回您的第二个目标表。内部查询返回您的第一个目标。

select 
b.id#,
b.membership_id,
b.start_date,
b.end_date
from membership_cards b
full outer join (
select * from
(select a.*,
max(end_date) over (partition by membership_number) max_end_date,
case when
end_date>=sysdate --replace with today or whatever
then 1 --active
else 0 --inactive
end index_active
from memberships a)
where (end_date<=max_end_date and end_date>=sysdate) or
end_date = max_end_date) c
on c.id# = membership_id
where (c.index_active = 1 and b.end_date >= sysdate) or
c.index_active = 0

关于MySQL查询以查找最近的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39635545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com