Sql 分析范围,如果为真,请告诉我
我想看看本周股票的价格是否有5%的变动。我有每天捕捉价格的数据。我可以通过执行以下操作获取过去7天的行: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的表中只有一只股票似乎很奇怪。
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-我在同一张表中有多只股票。该表包含股票行情、价格、收益率等数据。我同意数据对于表名来说是一个糟糕的选择。我不熟悉“交叉连接”和“强制转换”,所以我会研究它。谢谢