首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找最近成员的MySQL查询

问查找最近成员的MySQL查询
EN

Stack Overflow用户
提问于 2016-09-22 09:41:24
回答 1查看 55关注 0票数 1

我有两个MySQL表成员资格和member_cards。每个会员证可以有三个州。

  • Active = start_date <=今天<= end_date
  • 未来=今天< start_date
  • 过期= end_date <今天

成员资格表

代码语言:javascript
复制
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

会员卡制作

代码语言:javascript
复制
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. 所有活动+未来成员资格+(如果某个成员号没有活动或未来成员资格,则最后一次过期记录)

结果:

代码语言:javascript
复制
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. 活动卡+(如果成员资格已过期,则所有与该成员资格挂钩的卡)

结果:

代码语言:javascript
复制
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的member_cards查询来执行第二个查询(针对MySQL )。有什么更好的方法吗?

EN

回答 1

Stack Overflow用户

发布于 2016-09-22 11:04:54

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

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39635545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档