2016-06-14 7 views
-1

2つのテーブルUserUserAccessがあります。テーブル内の集計データ - TSQL

表 - User

USER_ID , Client_ID , Start_Date 
1   123  2015-06-30 
2   123  2015-06-25 
3   123  2015-06-20 
5   888  2016-02-10 
6   888  2016-02-15 
7   888  2016-02-12 

表 - UserAccess

USER_ACCESS_ID USER_ID 
    10   1   
    11   2   
    12   3 
    13   6 
    14   7   

UserAccess記録の有無にかかわらず、多くのUsers記録があるでしょう。 User_IDは、UserテーブルのPKであり、UserAccessテーブルのFKです。

クライアントごとに1つのユーザーレコードを返す汎用クエリを作成する必要があります。代わりに、同じクライアントの複数のユーザーレコードがあります。

問合せは、Userからのみ2レコードを返す必要があります。..

早いStart_DateUserを選択し、対応するUserAccessを持つレコードがある場合、それはUserAccess記録せずに、1つ以上の勝者を考えるだろう

  • ユーザ#3のようにテーブル、それは早いStart_DateUserAccessを持つレコード
  • ユーザ#5が最も初期のを持っているとして、がありますが、UserAccessというレコードはありません。したがって、User#7は、最も早い日付のUser Accessレコードを持つため、選択する必要があります。

私は説明することができました。

ありがとうございます。

よろしく

アリー

+0

私は、子テーブルの上にカウントをチェックしてCTEを試してみましたが、右の書き込み結果にあなたがそれをやった – Ally

答えて

0

ウィルあなたのために、そのクエリの仕事?

;WITH Users as (
    SELECT u.*, a.USER_ACCESS_ID 
    , RANK() OVER(PARTITION BY Client_ID 
      ORDER BY CASE WHEN a.USER_ID is Null 
        Then 1 ELSE 0 END, u.Start_Date) as ToPick 
    FROM tbl_User as u 
    LEFT JOIN tbl_UserAccess as a 
    ON u.USER_ID = a.USER_ID 
) 
SELECT USER_ID , Client_ID , Start_Date, USER_ACCESS_ID 
FROM Users 
WHERE ToPick = 1; 
+0

感謝を取得することができない、私はそれを別の方法をしましたが、あなたの方法は、 – Ally

+0

優れていた、これも働いていたあなたに感謝。私たちはそれを別の方法でやったが、あなたのやり方はよかった。 – Ally

+0

あなたは答えとしてマークしますか? –