2017-07-17 3 views
1

フィールドUserIdとaddedDateを持つ1つの "User"テーブルがあります。 90日前にためのシステムで、先月と今月中に追加されていない日付を追加 -MySql Query:指定された日付の値から最近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

Btw、これはオフトピックです。 – 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は、同様に

はここSQL Fiddleだ前にそれをピックアップしてはならないaddedDateから90日(または先月)が利用可能です。

+0

ちょっとDarshan ...ソリューションをありがとうが、サブクエリでは、DATE_ADD(NOW()、INTERVAL -2 MONTH)を追加しました。私は、UserDidが "addedDate"の90日前から利用可能でないことを確認する必要があります。だから私はそこに自己参加する必要がある。 – Madhura

関連する問題