2017-07-17 27 views
1

我有一个“用户”表字段UserId和addedDate。MySql查询:如何从给定日期值中选择最近90天内不存在的数据?

我需要得到用户的数据 - 在上个月和本月加入,而不是在系统前90天添加日期

用户表

Userid  addedDate   enddate 
001  2017-07-01  2017-09-05 
002  2017-02-25  2017-02-01 
003  2017-06-01  2017-09-21 
003  2017-04-25  2017-05-29 
004  2017-06-01  2017-09-21 
005  2017-06-05  2017-09-07 
005  2017-01-01  2017-01-31 

我需要输出像:

userid 
    001 
    004 
    005 

这里003不需要为它不是一个新用户(作为其可用的系统对于前90天加入日期)。并且002不会添加在最近的飞蛾或当前飞蛾中,所以这也不能被视为新用户。

我曾尝试下面的查询,但它不是做工精细:

select userid from usertbl final 
WHERE final.userid NOT IN (
SELECT meb.userid 
FROM usertbl meb 
INNER JOIN 
( 
SELECT mc.userid, addeddate, enddate 
FROM usertbl mc 
WHERE mc.enddate > NOW() 
AND mc.addeddate > DATE_ADD(NOW(), INTERVAL -90 DAY) 
) s 
ON s.userid = meb.userid 
AND 
(
meb.enddate > DATE_ADD(s.addeddate,INTERVAL -90 DAY) 
AND meb.enddate <> s.enddate 
) 
) 

请提供一些建议。

+0

顺便说一句,这是题外话。 – tilz0R

+0

@ tilz0R它为什么要这样?我看到示例数据,期望的结果,甚至解释以及OP已经尝试的查询。其实这是一个SQL问题应该如何。 – fancyPants

回答

0

您需要使用INNER查询得到的结果:

SELECT * 
FROM users 
WHERE addedDate >= DATE_ADD(NOW(), INTERVAL -2 MONTH) 
AND userid NOT IN (
    SELECT userid 
    FROM users 
    WHERE addedDate < DATE_ADD(NOW(), INTERVAL -2 MONTH) 
); 

几个要点:

  • 用户ID 003之前没有可用的90日内,在系统addedDate(2017年-06-01 vs 2017-04-25,即37天),所以它可能与选择标准相同(即不是本月或上个月)?
  • 用户ID 005可用之前addedDate因此它不应该被拾起90日(上个月)以及

这里的SQL Fiddle

+0

嘿Darshan ...感谢您的解决方案,但在子查询中,您已添加日期 Madhura