Postgres - 单个大型表上的数据操作

时间:2017-10-02 15:51:30

标签: sql postgresql common-table-expression

我有以下postgres表,其中 100万行

id |基础| option_symbol | option_type | expiration_date |罢工|中|

我需要在几秒钟内执行以下操作:

  1. 使用option_type =“foo”和expiration_date>获取所有行“2017年12月1日”
  2. 使用option_type =“bar”和expiration_date>获取所有行“2017年12月1日”
  3. 对于查询#1的每一行,循环查询#2的结果行,使用相同的底层和expiration_date,并计算从“#1”和“#2”的值中派生的“spread”。
  4. 对计算出的“点差”的结果列表进行排序,并为每个符号获得最佳结果。
  5. 如何在查询中执行""以下示例中的计算(spread_profit,spread_distance,spread_max_loss,spread_profit_ratio)?

    示例:

    TypeError: undefined is not an object (evaluating 'f.length')
    

1 个答案:

答案 0 :(得分:0)

我并不是100%肯定你正在尝试做什么,但答案可能看起来像这样:

select a.underlying
, a.expiration_date
, max(a.strike - b.strike) as spread
from mytable a
join mytable b on a.underlying = b.underlying 
          and a.expiration_date = b.expiration_date
where a.option_type = 'foo' 
and b.option_type = 'bar'
group by a.underlying, a.expiration_date