2017-07-17 72 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