Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/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 如何使用BETWEEN运算符比较两个SELECT子查询?_Sql_Select_Subquery_Between_Oracle12c - Fatal编程技术网

Sql 如何使用BETWEEN运算符比较两个SELECT子查询?

Sql 如何使用BETWEEN运算符比较两个SELECT子查询?,sql,select,subquery,between,oracle12c,Sql,Select,Subquery,Between,Oracle12c,我正在使用Oracle Database 12c Enterprise Edition 该表如下所示: 该表显示了不同股票的股票价格及其不同的ID WKN、起始价格、最高价格Hoch、最低价格Tief和截止日期数据。现在我想直接用SQL计算一个90天的行。通过确定过去90天内每天收盘价的算术平均值来计算 我尝试使用以下SQL语句计算此值: SELECT SUM(SCHLUSSPREIS) / 90 AS TAGESLINIE FROM KURS WHERE DATUM BETWEEN (SE

我正在使用Oracle Database 12c Enterprise Edition

该表如下所示:

该表显示了不同股票的股票价格及其不同的ID WKN、起始价格、最高价格Hoch、最低价格Tief和截止日期数据。现在我想直接用SQL计算一个90天的行。通过确定过去90天内每天收盘价的算术平均值来计算

我尝试使用以下SQL语句计算此值:

SELECT SUM(SCHLUSSPREIS) / 90 AS TAGESLINIE FROM KURS WHERE DATUM BETWEEN
  (SELECT DATUM FROM KURS WHERE WKN = 2 AND DATUM BETWEEN
    (SELECT MAX(DATUM) - 179 FROM KURS) AND
    (SELECT MAX(DATUM) - 90 FROM KURS) ORDER BY DATUM ASC)
  AND (SELECT DATUM FROM KURS WHERE WKN = 2 AND DATUM BETWEEN
   (SELECT MAX(DATUM) - 89 FROM KURS) AND
   (SELECT MAX(DATUM) FROM KURS) ORDER BY DATUM ASC)
;
为了更好地了解这一令人困惑的说法,我创建了以下方案:

都是,第一个子查询

(SELECT DATUM FROM KURS WHERE WKN = 2 AND DATUM BETWEEN
  (SELECT MAX(DATUM) - 179 FROM KURS) AND
  (SELECT MAX(DATUM) - 90 FROM KURS) ORDER BY DATUM ASC)
(SELECT DATUM FROM KURS WHERE WKN = 2 AND DATUM BETWEEN
  (SELECT MAX(DATUM) - 89 FROM KURS) AND
  (SELECT MAX(DATUM) FROM KURS) ORDER BY DATUM ASC)
。。。第二个子查询

(SELECT DATUM FROM KURS WHERE WKN = 2 AND DATUM BETWEEN
  (SELECT MAX(DATUM) - 179 FROM KURS) AND
  (SELECT MAX(DATUM) - 90 FROM KURS) ORDER BY DATUM ASC)
(SELECT DATUM FROM KURS WHERE WKN = 2 AND DATUM BETWEEN
  (SELECT MAX(DATUM) - 89 FROM KURS) AND
  (SELECT MAX(DATUM) FROM KURS) ORDER BY DATUM ASC)
。。。一定要返回一个日期相同的列表

第一个子查询列表中的第一个日期属于第二个子查询列表中的第一个日期,第一个子查询列表中的第二个日期属于第二个子查询列表中的第二个日期,以此类推。这是一个双簧管。现在,我希望我的SQL语句将从第一个日期列表1到第一个日期列表2等期间的所有收盘价相加,然后除以90得到算术平均值,直到两个列表都为空

但是,如果运行此操作,将收到以下错误消息:

ERROR at line 1:
ORA-00907: missing right parenthesis

知道如何直接在SQL中执行类似的操作吗

非常感谢您的帮助-谢谢-

SUM不是SQL中唯一可用的聚合函数。 在这里,您可能希望改用AVG:


研究什么是连接:您可以编写一个SQL函数来计算90天的平均值。它接受WKN和结束日期作为参数,并返回平均值。将此测试与主查询分开,并使其正常工作。然后从主SQL选择调用这个函数。我必须为大学做这件事,我们不允许使用用户定义的SQL函数。我将尝试使用连接和合并函数来解决它。谢谢你的提示,但这实际上不是我的问题。问题是我在BEVERY语句之间有两个子查询,它们都会重新调整日期列表,如。现在,我希望BETWEEN语句将第一个列表中的每个日期与订单上位置相同的第二个列表中的日期进行比较。但由于错误消息single row subquery返回多行,我认为这在中间是不可能的。那么,在没有用户定义的SQL函数的情况下,如何做类似的事情呢?这是不是敲响了警钟?我承认,我的问题有点让人困惑。我想让SQL计算一个certian股票的90天行,从该股票的当前最高可用日期开始,这就是我使用MAXDATUM的原因。但为了做到这一点,你必须确定过去90天内每天收盘价的算术平均值。所以最后你应该得到90种不同的算术平均值。假设MAXDATUM是2015年12月31日。然后,根据MAXDATUM-89和MAXDATUM之间的所有收盘价计算第一个算术平均值。[继续评论]MAXDATUM-90和MAXDATUM-1之间所有收盘价的第二个算术平均值。第三个是从MAXDATUM-91天和MAXDATUM-2等之间的所有收盘价中扣除,直到90天全部完成。谢谢!这里有两个小错误:首先,在这个特定的例子中,AVG不是一个groupby表达式,所以只需删除它。其次,该语句将返回错误的结果,因为您在OVER子句中写入了90而不是89。因此,SQL使用91个值进行计算,而不是90个值。其他一切都很好。再一次感谢你!