sql - 查找元组范围内的最大增量

标签 sql postgresql max

我有以下关系模式

stock_price(symbol: char, date: date, value: int)

我还有一个名为“range”的表,其中包含一些日期范围,格式为

╔════════════╦════════════╗
║    start   ║    end     ║
╠════════════╬════════════╣
║ 2001-10-01 ║ 2001-12-01 ║
║ 2001-12-01 ║ 2001-12-05 ║
║ 2001-12-20 ║ 2001-12-31 ║
╚════════════╩════════════╝

我需要为每个日期范围在值列中找到具有最大变化的符号(所以 max(max(value)-min(value)) )。

输出的一个例子是

╔════════════╦════════════╦════════╦════════════════╦═════════╗
║   start    ║    end     ║ symbol ║  company_name  ║ d_value ║
╠════════════╬════════════╬════════╬════════════════╬═════════╣
║ 2001-10-01 ║ 2001-12-01 ║ AAPL   ║ Apple Inc.     ║ 34.2    ║
║ 2001-12-01 ║ 2001-12-05 ║ MSFT   ║ Microsoft Corp ║ 12.5    ║
║ 2001-12-20 ║ 2001-12-31 ║ GOOG   ║ Alphabet Inc.  ║ 9.3     ║
╚════════════╩════════════╩════════╩════════════════╩═════════╝

最佳答案

这是 RANK 的简单任务:

select start, end, symbol, company_name, d_value
from
 (
   select r.start, r.end, sp.symbol, sp.company_name, 
       max(sp.value)-min(sp.value) as d_value,
       rank() -- rank the maximum difference
       over (partition by r.start, r.end
             order by max(sp.value)-min(sp.value) desc) as rnk          
    from stock_price as sp join range as r
      on sp.date between r.start and r.end
    group by r.start, r.end, sp.symbol, sp.company_name
 ) as dt
where rnk = 1

关于sql - 查找元组范围内的最大增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34672898/

相关文章:

mysql - 在 SQL 中搜索列中的 double 值

sql - 根据 ID 列将行转置为列

java - 硬币找零 - 寻找最大数量

mysql - SQL 交集查询

postgresql - Spring Boot 与 Postgres jsonb 的集成

java - 托管 HIPPO CMS

postgresql - 用特定值更新多行,用零更新其他行

mysql查询使用max不输出任何记录

c++ - 在数字列表中搜索最小值和最大值

mysql - 使用 GROUP BY 从 MySql 数据库中获取第二高的值