kli*_*ima 1 sql sql-server sql-server-2012
我有以下查询:
SELECT
cst_recno as [Member ID],
cmc_end_date as 'Last Term End date as a Trustee',
ind_first_name as 'Last Name',
ind_mid_name as 'First Name',
ind_last_name as 'Last Name',
cst_ixo_title_dn as 'title',
cst_org_name_dn as 'organization',
adr_country as 'Country',
adr_city as 'City',
adr_state as 'State',
cst_eml_address_dn as 'Email'
FROM mb_committee_x_customer
JOIN co_customer ON cst_key=cmc_cst_key
JOIN mb_committee ON cmt_key=cmc_cmt_key
JOIN co_individual ON ind_cst_key=cmc_cst_key
LEFT JOIN co_customer_x_address ON cmc_cxa_key=cxa_key
LEFT JOIN co_address ON cxa_adr_key = adr_key
WHERE cmc_end_date <= '9/6/2017'
AND ind_deceased_flag != 1
AND cmt_code = N'T'
ORDER BY cst_recno
Run Code Online (Sandbox Code Playgroud)
返回此示例数据:
MemberID Last Term End Date as a Trustee Last Name
1004 2003-06-30 Smith
1004 2005-06-30 Smith
1004 2006-06-30 Smith
1004 2008-06-30 Smith
1004 2007-06-30 Smith
Run Code Online (Sandbox Code Playgroud)
我想获得每个成员ID的最早日期,所以我的结果集如下所示:
MemberID Last Term End Date as a Trustee Last Name
1004 2008-06-30 Smith
Run Code Online (Sandbox Code Playgroud)
使用ROW_NUMBER()来识别最新记录每个memberID:
SELECT t.*
FROM(SELECT ROW_NUMBER() OVER(PARTITION BY s.memberID ORDER BY cmc_end_date DESC) as rnk,
cst_recno as [Member ID],
cmc_end_date as 'Last Term End date as a Trustee',
ind_first_name as 'Last Name',
ind_mid_name as 'First Name',
ind_last_name as 'Last Name',
cst_ixo_title_dn as 'title',
cst_org_name_dn as 'organization',
adr_country as 'Country',
adr_city as 'City',
adr_state as 'State',
cst_eml_address_dn as 'Email'
FROM mb_committee_x_customer
JOIN co_customer ON cst_key=cmc_cst_key
JOIN mb_committee ON cmt_key=cmc_cmt_key
JOIN co_individual ON ind_cst_key=cmc_cst_key
LEFT JOIN co_customer_x_address ON cmc_cxa_key=cxa_key
LEFT JOIN co_address ON cxa_adr_key = adr_key
WHERE cmc_end_date <= '9/6/2017' AND ind_deceased_flag != 1 AND cmt_code = N'T') t
WHERE t.rnk = 1
Run Code Online (Sandbox Code Playgroud)