如何将 proc sql table 中的行数限制为包含最高日期的行数
How do I limit the number of rows in a proc sql table to ones which contain the highest date
我正在尝试在我的大型机上执行大型查询,我需要做的是下拉所有具有最高 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)
但我知道这行不通;
建议表示赞赏
如果您使用直通 SQL 和 您的数据库支持 window 函数(它可能支持),那么您可以:
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
.
的最新记录
我正在尝试在我的大型机上执行大型查询,我需要做的是下拉所有具有最高 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)
但我知道这行不通; 建议表示赞赏
如果您使用直通 SQL 和 您的数据库支持 window 函数(它可能支持),那么您可以:
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
.