一旦达到值就限制查询结果

Limit query result once value has been reached

对于我的股票投资组合,我有两个表:

  1. 我投资组合中所有股票的日期、开盘价、收盘价、最高价、最低价。
  2. 我挑选的股票,以及股票的目标价。代码,目标

所以我的查询结果是这样的:

O、C、H、L 数据来自 API 提要,我希望我的查询结果停止报告代码(在本例中为 ALGN),一旦“高”中的值" 列超过了 "目标" 列中的值。

如果不是,查询结果将继续向我显示我已卖出且不再在我的投资组合中的股票的 O、C、H、L 数据。

我会使用 CASE 表达式吗?

23/08/2021 22:46

我添加了一个 CASE 表达式,显示我的交易达到预期目标的日期,但是,我的查询结果在达到目标后继续显示数据。

理想情况下,在 2021 年 2 月 4 日之后,我的查询将停止为我提供该代码的数据....

一种方法使用 window 函数:

select t.*
from (select t.*,
             min(case when high > target then date end) over (partition by ticker) as first_target_date
      from t
     ) t
where date >= first_target_date or
      first_target_date is null;

另一种方法是使用相关子查询。

Select t.*
From mytable t
Where t.date <= (
    Select min(date) From mytable x
    Where x.ticker=t.ticker
      and x.high>x.Target
)