1

我正在尝试在此表中添加一列:

CREATE TABLE #NEW_HIGH (SYMBOL char(4) not null, CLOSE_DATE date not null, CLOSE_PRICE money)
INSERT INTO #NEW_HIGH VALUES ('A','01/07/2019',31.46)
INSERT INTO #NEW_HIGH VALUES ('A','01/08/2019',32.5)
INSERT INTO #NEW_HIGH VALUES ('A','01/09/2019',34.94)
INSERT INTO #NEW_HIGH VALUES ('A','01/10/2019',34.95)
INSERT INTO #NEW_HIGH VALUES ('A','01/11/2019',34.57)
INSERT INTO #NEW_HIGH VALUES ('B','01/07/2019',12.21)
INSERT INTO #NEW_HIGH VALUES ('B','01/08/2019',11.88)
INSERT INTO #NEW_HIGH VALUES ('B','01/09/2019',12.25)
INSERT INTO #NEW_HIGH VALUES ('B','01/10/2019',12.30)
INSERT INTO #NEW_HIGH VALUES ('B','01/11/2019',11.26)
INSERT INTO #NEW_HIGH VALUES ('C','01/07/2019',22.99)
INSERT INTO #NEW_HIGH VALUES ('C','01/08/2019',22.95)
INSERT INTO #NEW_HIGH VALUES ('C','01/09/2019',22.14)
INSERT INTO #NEW_HIGH VALUES ('C','01/10/2019',23.09)
INSERT INTO #NEW_HIGH VALUES ('C','01/11/2019',22.91)

...输出为:

SYMBOL  CLOSE_DATE  CLOSE_PRICE RANK_BY_NEW_HI
A       1/7/2019    31.46       1
A       1/8/2019    32.5        2
A       1/9/2019    34.94       3
A       1/10/2019   34.95       4
A       1/11/2019   34.57       1
B       1/7/2019    12.21       1
B       1/8/2019    11.88       1
B       1/9/2019    12.25       2
B       1/10/2019   12.3        3
B       1/11/2019   11.26       1
C       1/7/2019    22.99       1
C       1/8/2019    22.95       1
C       1/9/2019    22.14       1
C       1/10/2019   23.09       2
C       1/11/2019   22.91       1

基本上我正在尝试添加一个名为“RANK_BY_NEW_HI”的第 4 列,该列从第 1 行中的值 1 开始,每当下一个 CLOSE_PRICE 记录(按 SYMBOL 和 DATE 顺序)更高时增加 1,并在它相等时重置为 1或低于之前的 CLOSE_PRICE 记录或新的 SYMBOL 开始。

我花了几天时间试图弄清楚这一点,所以任何帮助将不胜感激!

4

1 回答 1

2

这在 SQL Server 中要简单得多。您可以使用lag()来识别峰值,使用累积总和来识别结果组,然后row_number()

select nh.*, row_number() over (partition by symbol, high_grp order by close_date) as rank_by_new_high
from (select nh.*,
             sum(case when prev_cp < close_price then 0 else 1 end) over (partition by nh.symbol order by nh.close_date) as high_grp
      from (select nh.*,
                   lag(nh.close_price) over (partition by nh.symbol order by nh.close_date) as prev_cp
            from #new_high nh
           ) nh
     ) nh
order by symbol, close_date;

是一个 db<>fiddle。

你不是在征求我的意见,但我建议你在 SQL Server 而不是 MS Access 中工作。它是功能更强大的数据库。

于 2019-01-20T00:17:37.567 回答