在具有不同条件的数据库表中查找两个条目

时间:2015-02-06 00:50:50

标签: mysql sql

我有一个会员资格mySQL数据库。其中一个表是会员历史记录和每次会员续订时的记录。有一个唯一的自动增量字段,一个用于成员的登录名(每个成员的常量)和一个用于到期日。

我正在寻找一种方法来搜索所有成员,例如,他们在2014年11月到期,然后在2015年1月续订(他们的新到期日为2016年1月)。每个数据将在表中的两个单独的行中。

所以,我希望找到login_name,其中expiry = 11月14日,如果有另一个expiry = 1月16日的条目,则会找到相同的登录名,然后将结果显示为列表。

我一直在努力,但我还没有...

SELECT * FROM `membership_history` 
WHERE `login_name` IN (
    SELECT `login_name` 
    FROM `membership_history` 
    WHERE `membership_enddate` BETWEEN '2014-11-01' AND '2014-11-30' 
    OR `membership_enddate` BETWEEN '2016-01-01' AND '2016-01-31' 
    GROUP BY `login_name` HAVING count(`login_name`) > 1 
) 
ORDER BY `login_name`

任何提示或帮助将不胜感激 - 谢谢

1 个答案:

答案 0 :(得分:0)

首先,我倾向于将其写为join而不是in。然后,您可以消除where子句,除非出于性能原因需要它(它过滤数据但不需要获得相同的结果):

SELECT mh.*
FROM `membership_history` mh JOIN
     (select login_name
      from membership_history mh2
      group by login_name
      having sum(membership_enddate BETWEEN '2014-11-01' AND '2014-11-30') > 0 and
             sum(membership_enddate BETWEEN '2016-01-01' AND '2016-01-31') > 0
    ) ml
    on mh.login_name = ml.login_name;