以客户第一次在任何系统注册的时间为例

Take the time when customer first time register in any system

我在数据库中有一些表:

C_Master_USER - 包含用户 (ID_USER) 和他们的 MasterID (ID_Master) 之间的关系 - 来自不同系统的用户但他们使用 f.e。相同的电子邮件将具有相同的 MasterID

V_DL_C_USER - 包含每个用户的 ID_Source 和 ID_SYS_TYPE

C_Source - 包含源系统的实体名称

C_SYS_TYPE - 包含系统类型的实体名称

我的简单任务是获取每个 MasterID、它们的 RegistratonDate 和任何系统中的首次注册来源

SELECT top 50 
MasterID, RegistrationDate, SourceName, SystemName
FROM (
SELECT
    a.ID_MASTER as MasterID, 
    a.DATE_N as RegistrationDate,
    c.Name2 as SourceName,
    d.Name_2 as SystemName,
    ROW_NUMBER() OVER(ORDER BY a.DATE_N ASC) as RN
FROM C_MASTER_USE a 
join V_DL_C_USER b on a.ID_USER = b.ID 
join c_source c on b.ID_Source = c.ID
join C_SYS_TYPE d on b.ID_SYS_TYPE = d.ID
) t
where RN = 1

但是查询结果只有1个,是所有系统中最新的用户。

MasterID    RegistrationDate        SourceName       SystemName

8825938     2020-11-10 08:17:30     Mobile App       Club

如果您想要每个 MasterId 一行,请使用 PARTITION BY:

SELECT top 50 
MasterID, RegistrationDate, SourceName, SystemName
FROM (
SELECT
    a.ID_MASTER as MasterID, 
    a.DATE_N as RegistrationDate,
    c.Name2 as SourceName,
    d.Name_2 as SystemName,
    ROW_NUMBER() OVER(PARTITION BY a.ID_MASTER ORDER BY a.DATE_N ASC) as RN
FROM C_MASTER_USE a 
join V_DL_C_USER b on a.ID_USER = b.ID 
join c_source c on b.ID_Source = c.ID
join C_SYS_TYPE d on b.ID_SYS_TYPE = d.ID
) t
where RN = 1