我的目标:我有一个股票ID列表,希望得到最后的出价(按日期排序),每个股票ID只有一个。
对于图片,它意味着我想:
stock_id bid
3 663.91953
1 46.44281
2 9.02798
一个问题是,我们有像天然气这样的股票被暂停,所以最后的报价之一可以是2021年6月6日为例。
在这种情况下,在quote_day = DATE(NOW())上取一个where将不起作用。
我还需要相同的第一个较低的日期,这是不在1。查询,这可以在2。查询。
我目前使用php的解决方案。这是工作,但性能不是完美的100只股票,它需要5秒。
我可以使用Ruby,这也将是一个选择,以节省出价的地方。
当前:
select `quote_date`, 'stocks' as `type`, `bid`, `stock_id` as id
from (
select t.*, row_number()
over(partition by stock_id order by `quote_date` desc) as rn
from end_day_quotes_AVG t
where quote_date <= DATE({$date})
AND stock_id in ({$val})
and currency_id = {$c_id}
) x where rn = 1
前一天:
select `quote_date`, 'stocks' as `type`, `bid`, `stock_id` as id
from (
select t.*, row_number()
over(partition by stock_id order by `quote_date` desc) as rn
from end_day_quotes_AVG t
where quote_date < DATE({$date})
AND stock_id in ({$val})
and currency_id = {$c_id}
) x where rn = 1
股票标识、报价日期和货币标识是唯一的。
要从中获取数据的表:服务器:10.9.4-玛丽亚数据库-1:10.9.4
1条答案
按热度按时间4zcjmb1e1#
我想得到最后出价(按日期排序)只有一个每个股票ID。
我还需要相同的第一个较低的日期,这是不是在第一个查询。
您是否正在查找截至给定日期的每个投标的 * 两个 * 最新报价?如果是,您可以修改第一个查询以允许行号为1 * 和2*: