1

私はこのようなテーブルを持っています:

CreateDate  |  UserID
2012-01-1   |     1
2012-01-10  |     2
2012-01-20  |     3
2012-02-2   |     4
2012-02-11  |     1
2012-02-22  |     2
2012-03-5   |     3
2012-03-13  |     4
2012-03-17  |     5

2013 年 2 月 1 日以降に作成され、2013 年 2 月 1 日より前にデータベースに存在しない UserID を表示するクエリが必要です

上記の例から、結果は次のようになります。

CreateDate  |  UserID
2012-02-2   |     4
2012-03-13  |     4
2012-03-17  |     5

ストアド プロシージャを使用せずに単一のクエリでのみ解決できますか?

4

2 に答える 2

1

UserID前に存在するを個別に取得するサブクエリを使用できます。サブクエリFeb. 2, 2013の結果は、 を使用してテーブル自体に結合されますLEFT JOIN

SELECT  a.*
FROM    tableName a
        LEFT JOIN 
        (
            SELECT  UserID
            FROM    tableName
            WHERE   CreateDate < '2013-02-01'
        ) b ON a.userID = b.userID
WHERE   a.CreateDate > '2013-02-01' AND
        b.userID IS NULL

INDEXパフォーマンスを高速化するには、 on columnを追加しますuserID

于 2013-02-19T09:37:48.817 に答える
0

これはそれを行う1つの方法です:

select 
  CreateDate,
  UserID
from Users
where CreateDate >= '2012-02-01'
and UserId not in (
  select UserId
  from Users
  where CreateDate < '2012-02-01'
)

SqlFiddle リンク: http://www.sqlfiddle.com/#!2/7efae/2

于 2013-02-19T09:34:35.040 に答える