Как ограничить количество строк в таблице proc sql теми, которые содержат самую высокую дату

Я пытаюсь выполнить большой запрос на моем мэйнфрейме, мне нужно только развернуть все строки с самым высоким PD_START_DATE. Я полагаю, это что-то вроде

PROC SQL ;
SELECT PD_PROP_NUM, PD_RATE_PGM, PD_START_DATE, PD_END_DATE, PD_DOW_FREQ, PD_ROOM_POOL, PD_QUOTE_SERIES, PD_RPGM_SEQ_NUM, PD_PROD_LINE 
FROM Sbtddraf.nycomnidat
(SELECTorder by PD_START_DATE 
DESC 
NOBS =PD_START_DATE(MAX) 

но я знаю, что это не работает; Совет ценится

1 ответ

Решение

Если вы используете сквозной SQL и ваша база данных поддерживает оконные функции (что, вероятно, и делает), то вы можете сделать:

PROC SQL ;
    SELECT PD_PROP_NUM, PD_RATE_PGM, PD_START_DATE, PD_END_DATE, PD_DOW_FREQ, PD_ROOM_POOL, PD_QUOTE_SERIES, PD_RPGM_SEQ_NUM, PD_PROD_LINE 
    FROM (SELECT n.*,
                 ROW_NUMBER() OVER (PARTITION BY PD_PROP_NUM ORDER BY PD_START_DATE DESC) as seqnum
          FROM Sbtddraf.nycomnidat n
         ) n
    WHERE seqnum = 1;

Есть другие способы выразить эту логику, если это не работает.

РЕДАКТИРОВАТЬ:

Вот альтернатива:

PROC SQL ;
    SELECT PD_PROP_NUM, PD_RATE_PGM, PD_START_DATE, PD_END_DATE, PD_DOW_FREQ, PD_ROOM_POOL, PD_QUOTE_SERIES, PD_RPGM_SEQ_NUM, PD_PROD_LINE 
    FROM Sbtddraf.nycomnidat n
    WHERE n.PD_START_DATE = (SELECT MAX(n2.PD_START_DATE)
                             FROM Sbtddraf.nycomnidat n2
                             WHERE n2.PD_PROP_NUM = n.PD_PROP_NUM
                            );

Обратите внимание WHERE пункт. Это говорит о том, что вы хотите самую последнюю запись для каждого PD_PROP_NUM,

Другие вопросы по тегам