Sql server 表中的聚合数据-TSQL
我有两个表,Sql server 表中的聚合数据-TSQL,sql-server,tsql,common-table-expression,Sql Server,Tsql,Common Table Expression,我有两个表,User和UserAccess 表-用户: 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 2
User
和UserAccess
表-用户
:
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
将有许多用户
记录,包括或不包括用户访问
记录User\u ID
是User
表中的PK,是UserAccess
表中的FK
我必须编写一个通用查询来为每个客户端返回一个用户记录,而不是为同一个客户端返回多个用户记录
< P> <代码>用户< /代码>最早的<代码>启动日期>代码>,如果有对应的<代码>用户访问< /代码>,它将被认为胜过一个没有<代码>用户访问< /代码>记录>
查询应仅返回用户
表中的2条记录,如下所示:
- 用户#3,因为它具有最早的
和Start_日期
记录UserAccess
- 用户#5具有最早的
,但没有StartDate
记录,因此应选择用户#7,因为它具有最早日期的用户访问记录UserAccess
Ally这个查询对你有用吗
;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;
我尝试过CTE检查子表上的计数,但无法得到写入结果谢谢你做得对,我用了不同的方法,但你的方法更好谢谢你,这也很有效。我们用了不同的方法,但你的方法更好