MariaDB通过按日期排序的IN查询获取多个条目的last和previus

pieyvz9o  于 2023-01-02  发布在  其他
关注(0)|答案(1)|浏览(119)

我的目标:我有一个股票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

4zcjmb1e

4zcjmb1e1#

我想得到最后出价(按日期排序)只有一个每个股票ID。
我还需要相同的第一个较低的日期,这是不是在第一个查询。
您是否正在查找截至给定日期的每个投标的 * 两个 * 最新报价?如果是,您可以修改第一个查询以允许行号为1 * 和2*:

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 f
    from end_day_quotes_AVG t 
    where quote_date <= DATE(?) AND stock_id in (?)  and currency_id = ? 
) x 
where rn <= 2  -- the latest two

相关问题