在90天之前显示所有记录

时间:2012-10-28 21:54:18

标签: mysql database

我正在尝试显示可供献血的捐赠者名单。为此,我正在计算他们的最后捐赠日期是否在90天之前。这是我的疑问:

select *
from donar, donation
    donar.id=donation.donar_id
    and sex='female'
    and datediff(curdate(),donation_date) > 120

问题是它完全显示了捐赠者的名字,但如果捐赠者现在给了血,它仍然在列表中显示他的名字,因为他在90天之前有一个先前的条目。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

您错过了示例中的位置。给出一个镜头......你需要从另一个角度看问题...根据你的评论,这里有一个简单的方法来获得不同日期限制的男性和女性。你可以在没有UNION的情况下做到这一点,但我认为工会保留了男女不同日子的逻辑。

 SELECT * from donor 
   LEFT JOIN donation ON donor.id=donation.donor_id 
        AND donation.donation_date > NOW() - INTERVAL 120 day
 WHERE donation.donation_id IS NULL  
      AND donor.sex='female' 

 UNION   

 SELECT * from donor 
   LEFT JOIN donation ON donor.id=donation.donor_id 
        AND donation.donation_date > NOW() - INTERVAL 90 day
 WHERE donation.donation_id IS NULL  
      AND donor.sex='male' 

基本上这个查询说“给我所有人在donar表中,包括90天捐赠的人的信息,然后只显示那些没有捐赠细节的人(AKA人员在90天内没有捐赠)。

答案 1 :(得分:0)

select * from donar 
       left join donation 
                 on ( donar.id=donation.donar_id )
       where (
               ( sex='female' and datediff(curdate(),donation_date) > 120) 
               or 
               ( sex='male' and datediff(curdate(),donation_date) > 90) 
             )
             or donation.id is null;