我有以下关系模式
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/