表中的聚合数据 - TSQL

时间:2016-06-14 15:25:00

标签: sql-server tsql common-table-expression

我有2个表,import openpyxl wb = openpyxl.load_workbook('C:\\Names.xlsx') ws = wb['Sheet1'] cells = [] for row in ws: A, B = row[:2] cells.append([A.value, B.value]) # capture the first two cells User

表 - UserAccess

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 条记录,包含或不包含Users条记录。 UserAccessUser_ID表中的PK和User表中的FK。

我必须编写一个通用查询来为每个客户端返回一个用户记录,而不是同一个客户端有多个用户记录。

选择最早UserAccess的{​​{1}},如果有相应User的记录,则会在没有Start_Date记录的情况下将其视为胜者。

查询应该只返回UserAccess表中的2条记录

  • 用户#3,因为它具有最早的UserAccess User记录
  • 用户#5拥有最早的Start_Date但没有UserAccess记录,因此应该选择用户#7,因为它具有最早的用户访问记录。

希望我能够解释。

提前致谢。

此致

同盟

1 个答案:

答案 0 :(得分: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;