2016-05-06 2 views
0

Я пытаюсь получить всю совокупность переменных при удалении с самой последней возможной даты обновления (PD_LAST_UPDATE), некоторые поля были обновлены вчера, некоторые поля, возможно, были год назад, поэтому я не могу просто сделать PD_LAST_UPDATE = (переменная закодирована до определенного времени), и если я сделаю какое-то заданное время, я получу слишком много данных.включая внутреннее соединение max statement с proc sql

Вот мой код

(SELECT N1.PD_PROP_NUM, N1.PD_START_DATE, N1.PD_END_DATE, N1.PD_DOW_FREQ, 
     N1.PD_RATE_PGM, N1.PD_ROOM_POOL, N1.PD_QUOTE_SERIES, 
     N1.PD_RPGM_SEQ_NUM, N1.PD_LAST_UPDATE 
     FROM OMP.OMT_PR_SSTRAT_DTL N1 

    INNER JOIN OMP.OMT_PROP_SSTRAT AS N2 ON (N1.PD_PROP_NUM=N2.PS_PROP_NUM AND 
               N1.PD_START_DATE=N2.PS_START_DATE AND 
               N1.PD_DOW_FREQ=N2.PS_DOW_FREQ AND 
               N1.PD_ROOM_POOL=N2.PS_ROOM_POOL) 

    WHERE N2.PS_PROP_NUM in (11612) AND **n1.PD_LAST_UPDATE = (MAX)** 
    ); 

    quit; 

Часть Особый интерес представляет жирным шрифтом, а проп Num перед ним будет покончено, как только я могу понять, как выбрать максимальное значение, так что я могу тянуть вниз все проблемы. Заранее спасибо.

+0

У вас есть записи с похожим PD_LAST_UPDATE? Если да, как вы собираетесь показывать данные? Если нет, то это не должно быть проблемой. –

+0

Некоторые из них одни и те же, но некоторые очень разные. Если бы я мог хватать максимум всех PD_LAST_UPDATES, это не было бы проблемой, но я понятия не имею, как это сделать. – Kumachorou

+0

У меня может быть решение, но сначала позвольте мне задать несколько вопросов. 1. Сколько записей вы показываете? Подумайте о том, какие записи вы хотите отобразить. Если это всегда 1 запись, то вам также нужно указать max другими полями. Если он будет равен или больше 1 записи, я предоставил решение. –

ответ

0

У вас есть два способа фильтрации максимального значения переменной.

Один в группе все, что вы хотите, чтобы вычислить максимум на, а затем использовать having (который является после группы, по версии where), например так:

proc sql; 
    select origin, make, model 
    from sashelp.cars 
    group by origin, make 
    having mpg_city = max(mpg_city); 
quit; 

Это допускается в SAS, но не в большинстве других SQL-аксессуаров. Это ярлык для другого метода ниже, в основном, и он работает только в некоторых конкретных структурах данных.

Более традиционный подход, то, чтобы сделать связанный подзапрос:

proc sql; 
    select origin, make, model 
    from sashelp.cars C 
    where mpg_city = (
    select max(mpg_city) 
    from sashelp.cars R 
    where C.origin=R.origin 
     and C.make=R.make 
     group by make, origin 
    ); 
quit; 

В этом случае мы получаем то же самое место, и более или менее попасть туда же - SAS делает это на задней стороне в любом случае.

В случае соединения вы можете выполнить этот подзапрос или аналогичный набор данных до объединения (или в подзапросе, результат которого затем присоединен), или вы можете сделать это по результату соединения, в зависимости от того, что более эффективно и нужны ли строки из обеих таблиц для определения максимального значения.

Смежные вопросы