Как выбрать 1 строку для человека, который имеет 2 учетных записи в системе - PullRequest
0 голосов
/ 01 февраля 2019

1-я часть для достижения: Я пытаюсь вернуть строку для человека "ABC1", где у него есть APP_START_DT.или APP_SUBMIT_DT, но я хочу вернуть также Acct_CR_DT, который в данном случае - 9/5/2018, и я не хочу дубликатов.Одна строка на человека для таких записей.

2 часть, которую я хочу достичь: Если у них есть какая-либо дата, вернуть последний статус, основанный на том, что в этом случае следует посмотреть«APP_SUBMIT_DT» и вернуть «Приложение отправлено»

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

Ответы [ 3 ]

0 голосов
/ 01 февраля 2019

другой вариант, вы можете использовать оконную функцию 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
0 голосов
/ 02 февраля 2019

Насколько я понимаю, вам нужны самые старые 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

НоБудьте осторожны с двумя возможными ситуациями: один и тот же идентификатор с другим ИМЯ и одно и то же имя с другим ИД.

0 голосов
/ 01 февраля 2019

Вы можете использовать агрегацию:

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;
...