Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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_Database_Postgresql - Fatal编程技术网

Sql 分析范围,如果为真,请告诉我

Sql 分析范围,如果为真,请告诉我,sql,database,postgresql,Sql,Database,Postgresql,我想看看本周股票的价格是否有5%的变动。我有每天捕捉价格的数据。我可以通过执行以下操作获取过去7天的行: select price from data where date(capture_timestamp)>date(current_timestamp)-7; 但我如何分析这一点,看看价格是上涨了还是下跌了5%?可以用一条sql语句完成所有这些吗?我希望能够将它的任何结果插入到一个新表中,但我只想首先关注它在shell中打印出来 谢谢。在一个名为data的表中只有一只股票似乎很奇怪。

我想看看本周股票的价格是否有5%的变动。我有每天捕捉价格的数据。我可以通过执行以下操作获取过去7天的行:

select price from data where date(capture_timestamp)>date(current_timestamp)-7;
但我如何分析这一点,看看价格是上涨了还是下跌了5%?可以用一条sql语句完成所有这些吗?我希望能够将它的任何结果插入到一个新表中,但我只想首先关注它在shell中打印出来


谢谢。

在一个名为data的表中只有一只股票似乎很奇怪。您需要做的是将上周和今天的值的两行放在一起,如下查询所示:

select d.price
from data d cross join
     data dprev
where cast(d.capture_timestamp as date = date(current_timestamp) and
      cast(dprev.capture_timestamp as date) )= cast(current_timestamp as date)-7 and
      d.price > dprev.price * 1.05

如果数据表包含股票代码,则交叉联接将是一个等分联接。

您可以使用下面子查询中的查询来进行任何计算。这是假设每天有一条记录。前面的7行是文字

SELECT ticker, price, capture_ts
      ,MIN(price) OVER (PARTITION BY ticker ORDER BY capture_ts ROWS BETWEEN 7 PRECEDING AND CURRENT ROW) AS min_prev_7_records
      ,MAX(price) OVER (PARTITION BY ticker ORDER BY capture_ts ROWS BETWEEN 7 PRECEDING AND CURRENT ROW) AS max_prev_7_records
  FROM data

是否要将今天的值与上周的值进行比较,忽略中间的任何值?@AlejoBrz-是,忽略中间的所有值都可以。+1但您缺少了减少选项,并且缺少了第一个值的结束“)”cast@Gordon_Linoff-我在同一张表中有多只股票。该表包含股票行情、价格、收益率等数据。我同意数据对于表名来说是一个糟糕的选择。我不熟悉“交叉连接”和“强制转换”,所以我会研究它。谢谢