Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于条件值排序的SQL_Sql_Conditional_Ms Access 2010_Ranking_Ranking Functions - Fatal编程技术网

用于条件值排序的SQL

用于条件值排序的SQL,sql,conditional,ms-access-2010,ranking,ranking-functions,Sql,Conditional,Ms Access 2010,Ranking,Ranking Functions,我正在尝试将列添加到此表中: 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',

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

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的第四列,它从第1行的值1开始,在符号和日期顺序中的下一个收盘价记录较高时增加1,在它等于或低于上一个收盘价记录或新符号开始时重置为1


我花了几天的时间试图弄明白这一点,所以任何帮助都将不胜感激

这在SQL Server中要简单得多。您可以使用lag来识别峰值,使用累积和来识别结果组,然后使用行编号:

他是一把小提琴


您不是在征求我的意见,但我建议您使用SQL Server而不是MS Access进行工作。这是一个功能更强大的数据库。

这在MS Access中很难做到。您还有其他可用的数据库吗?到目前为止,我已经使用SQL viewer在Access中编写了所有内容,意识到存在语法限制,但是如果您有使用SQL Server的建议,那就太好了。谢谢你的回复,戈登!太棒了…在SQL Server中工作得非常好!同意,我就把它换了。再次感谢你,戈登!
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;