【问题标题】:SQL - Calculated ColumnSQL - 计算列
【发布时间】:2021-01-23 22:06:50
【问题描述】:

我有一张表格,它显示了股票行情、截至日期、开盘价、收盘价。 我创建了一个名为daily PL 的计算列,它只是每日收盘价。

,(close-open) AS daily_pl

我无法弄清楚使用第一个 asofdate 中的 {open} 和最近的 asofdate 中的 {close} 的逻辑。并且表格会自然增长,因此逻辑需要是动态的。见下文:

【问题讨论】:

  • 我不清楚你想在哪里包含这些信息?
  • 我要么修改 daily_pl 列,要么创建一个新列。
  • 为什么不创建一个在查询中根据需要进行计算的函数?
  • 我已经学习 SQL 4 天了,如果你能告诉我如何计算,我将非常感激。
  • 我建议更新问题以显示您想要的结果,而不仅仅是您当前获得的结果。然后,解释每一行的逻辑。假装我们不知道你的意思,你需要用两三种方式来证明它。

标签: sql postgresql calculated-columns


【解决方案1】:

您可以使用窗口函数。我认为first_value() 可以满足您的需求——获得第一个open 的价格:

select j.*,
       (close - first_value(open) over (partition by ticker order by asofdate) as daily_pl
from jandata j;

如果您只希望每个代码的结果集中有一行,那么您可以使用:

select distinct ticker,
       (first_value(close) over (partition by ticker order by asofdate desc) -
        first_value(open) over (partition by ticker order by asofdate)
       ) 
from jandata;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-04
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 2021-12-08
    相关资源
    最近更新 更多