【问题标题】:Select top 2 prices for each symbol为每个符号选择前 2 个价格
【发布时间】:2014-12-26 15:19:02
【问题描述】:

我想获取下表中每个符号的前两个最近价格

如果我只想要最近的价格,我会 "select distinct symbol, price from table_1 order by date, time"

获得两个最近的价格让我有点卡住了

CREATE TABLE [dbo].[Table_1](
[symbol] [nchar](15) NOT NULL,
[price] [float] NULL,
[date] [date] NOT NULL,
[time] [time](7) NOT NULL,
) ON [PRIMARY]

【问题讨论】:

标签: sql sql-server


【解决方案1】:

在 SQL Server 中,可以使用row_number():

select t.*
from (select t.*,
             row_number() over (partition by symbol order by date desc, time desc) as seqnum
      from table_1 t
     ) t
where seqnum <= 2;

作为注释。要获得最新价格,您会这样做:

select distinct symbol, price
from table_1
order by date, time;

这会产生语法错误,因为datetime 不在select 子句中。如果您删除了order by,您将只获得所有不同symbol/price 对的列表。

【讨论】:

  • 谢谢,我会试试的。
【解决方案2】:

select top 2 symbol, price from table_1 order by date, time 怎么样?

【讨论】:

  • 只抓取 2 行,有点需要它来循环所有符号。如果我有 100 个符号,它将是 200 行否则我可能需要添加一个额外的列作为插入时间并按过去一小时过滤
猜你喜欢
  • 1970-01-01
  • 2018-10-07
  • 2013-04-04
  • 2016-05-28
  • 2021-04-07
  • 2018-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多