SQL:获取最近一个月的N和这些记录的历史记录

问题描述

我想查找最近一段时间的前N个名字(值最高的名字)。对于这些名称,我想获得历史价值。

此问题Select top 10 records for each category

我尝试了以下操作:

base_table (period,name,value)

CREATE VIEW TOP3 AS
SELECT DISTINCT a.*,COUNT(*) as rank
FROM base_table AS a
LEFT JOIN base_table AS a2 
ON a.period = a2.period and a.value <= a2.value
GROUP BY a.value
HAVING COUNT(*) <= 3
ORDER BY period,rank;

这使我成为每个时期的前三名。

period | name | value | rank
092020   Joe    100      1
092020   Jane   90       2
092020   Doe    80       3

082020   Jan    100      1
082020   Doc    99       2
082020   Pete   98       3
.
.
.

但不是理想的结果。

假设这些是最近一个月的前三名:

period | name | value | rank
092020   Joe    100      1
092020   Jane   90       2
092020   Doe    80       3

现在,我希望获得这些的历史记录,即使它们不在上个月的前3名中,也是如此:

period | name | value | rank
092020   Joe    100      1
092020   Jane   90       2
092020   Doe    80       3

082020   Joe    95       4
082020   Jane   94       5
082020   Doe    7        50
.        .      .        .
.        .      .        .
.        .      .        .
092019  Joe     42       20
092019  Doe     34       35
092019  Jane    1        100

仅供参考,我正在使用PROC SQL在SAS中工作,因此对我而言,诸如CTE,窗口函数和其他内容之类的细腻内容对我不可用。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)