聚合表中的数据 - SQL
Aggregate Data in Tables - TSQL
我有 2 个 table,User
和 UserAccess
。
Table - 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
Table - UserAccess
:
USER_ACCESS_ID USER_ID
10 1
11 2
12 3
13 6
14 7
会有很多Users
条记录,有或没有UserAccess
条记录。 User_ID
是 User
table 中的 PK 和 UserAccess
table 中的 FK。
我必须为每个客户 return 一个用户记录编写一个通用查询,而不是同一个客户有多个用户记录。
选择最早Start_Date
的User
,如果有对应UserAccess
的记录,则认为胜过没有UserAccess
的记录记录..
查询应该 return 只有来自 User
table 的 2 条记录 as
- 用户 # 3 因为它有最早的
Start_Date
和 UserAccess
记录
- 用户 # 5 有最早的
StartDate
但没有 UserAccess
记录,因此应该选择用户 # 7,因为它有最早日期的用户访问记录。
希望我能解释清楚。
提前致谢。
此致
盟友
该查询对您有用吗?
;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;
我有 2 个 table,User
和 UserAccess
。
Table - 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
Table - UserAccess
:
USER_ACCESS_ID USER_ID
10 1
11 2
12 3
13 6
14 7
会有很多Users
条记录,有或没有UserAccess
条记录。 User_ID
是 User
table 中的 PK 和 UserAccess
table 中的 FK。
我必须为每个客户 return 一个用户记录编写一个通用查询,而不是同一个客户有多个用户记录。
选择最早Start_Date
的User
,如果有对应UserAccess
的记录,则认为胜过没有UserAccess
的记录记录..
查询应该 return 只有来自 User
table 的 2 条记录 as
- 用户 # 3 因为它有最早的
Start_Date
和UserAccess
记录 - 用户 # 5 有最早的
StartDate
但没有UserAccess
记录,因此应该选择用户 # 7,因为它有最早日期的用户访问记录。
希望我能解释清楚。
提前致谢。
此致
盟友
该查询对您有用吗?
;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;