第一部分要实现:我正在尝试返回具有APP_START_DT的人员“ ABC1”的行。 或APP_SUBMIT_DT,但我也想返回Acct_CR_DT,在这种情况下是2018年9月5日,我不希望重复。每人一行这样的记录。
我要实现的2部分:当他们有任何日期时,请根据该日期返回最新状态,在这种情况下,应查看“ APP_SUBMIT_DT”并返回“已提交应用” < / p>
My Table:
ID NAME Acct_CR_DT App_Ap APP_START_DT APP_SUBMIT_DT
44444 ABC1 9/5/2018 My univ 9/5/2018 9/14/2018
44444 ABC1 10/2/2018 {null} {null} {null}
Desired Results:
ID NAME Acct_CR_DT App_Ap APP_START_DT APP_SUBMIT_DT App_stat
44444 ABC1 9/5/2018 My univ 9/5/2018 9/14/2018 Submt
答案 0 :(得分:0)
您可以使用聚合:
select id, name, min(acct_cr_dt) as acct_cr_dt, min(app_ap) as app_at,
min(app_start_dt) as app_start_dt), min(app_submit_dt) as app_submit_dt
from t
group by id, name;
答案 1 :(得分:0)
您可以使用窗口函数row_number()的另一个选项
select * from
(
select t.*,row_number()over(partition by id, name order by Acct_CR_DT) rn
from table_name t
) t1 where t1.rn=1
答案 2 :(得分:0)
我的理解是,您需要最旧的acct_crt_dt和app_start_dt以及较新的app_submit_dt。另外,如果出于某种原因您需要在单个字符串中列出app_ap列表,请使用listagg(在Oracle和Db2上受支持,我不知道在其他RDBMS上是否受支持):
select id, name, min(acct_cr_dt) as acct_cr_dt, listagg(app_ap,', ') as app_at,
min(app_start_dt) as app_start_dt, max(app_submit_dt) as app_submit_dt
from t
group by id, name
但要小心以两种可能的情况:相同的ID具有不同的名称,并不同的ID相同的名称