[英]From a certain number of rows with the same primary key, how do I select the ones with the highest value in a certain column?
[英]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, 並且數據庫支持窗口函數(可能這樣做),則可以執行以下操作:
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
最新記錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.