2015-07-09 2 views
1

Я ищу, чтобы вернуть самый последний результат, когда letter_source является «CCMA», в зависимости от даты, когда letter_type «P29».Возврат последнего значения с использованием proc SQL в SAS

В принципе, мне нужно знать дату последнего письма «CCMA» только для счетов, у которых была буква «P29». Буквой CCMA может быть любая дата, пока она самая последняя, ​​но P29 должен находиться в течение определенного периода времени.

Пока мой код:

proc sql; 
    select distinct 
     account_no  as account_no 
    ,letter_date as letter_date 
    ,letter_type as letter_type 
    ,source  as letter_source 
    from uulster.perm_aura_letters 
    where letter_type="P29" 
    and letter_date >= '01jul2015'd and letter_date <= '09jul2015'd 
    order by letter_date, letter_type; 
quit; 

Пожалуйста, не могли бы вы помочь?

ответ

0

Я думаю, вы можете сделать это, используя 2 таблицы букв подменю. Это не очень, но я не придумал более эффективный способ прямо сейчас ...

select distinct 
    account_no  as account_no 
    ,letter_date as letter_date 
    ,letter_type as letter_type 
    ,source   as letter_source 
from uulster.perm_aura_letters p29 
join uulster.perm_aura_letters ccma on p29.account_no = ccma.account_no 
where p29.letter_type="P29" 
and ccma.letter_type = "CCMA" 
and p29.letter_date >= '01jul2015'd and p29.letter_date <= '09jul2015'd 
and ccma.letterdate = (subselect max date for account and ccma) 
order by p29.letter_date, p.29.letter_type 

;

1
proc sql; 
select * from (select distinct 
     account_no  as account_no 
     ,letter_date as letter_date 
     ,letter_type as letter_type 
     ,source   as letter_source 
     from uulster.perm_aura_letters 
     where letter_type="P29" 
     and letter_source contains "CCMA" 
     and letter_date >= '01jul2015'd and letter_date <= '09jul2015'd) 
having letter_date=max(letter_date) 
order by letter_date, letter_type 
; 
quit; 
Смежные вопросы