2014-12-26 4 views
2

я хотел, чтобы захватить две верхние последние цены для каждого символа в таблице нижеВыберите верхние 2 цены для каждого символа

если я хотел только самую последнюю цену я бы «выбрать отличный символ, цена от заказа table_1 по дате, времени»

получать две самые последние цены покидает меня немного застрял

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

Ваш синтаксис SQL Server, поэтому я меняю тег на sql-server. –

+0

http://dba.stackexchange.com/questions/86415/retrieving-n-rows-per-group –

ответ

4

В 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; 

Это привело бы к синтаксической ошибке, поскольку date и time не в п select. Если вы удалили order by, вы просто получите список всех отдельных symbol/price пар.

+0

Спасибо, я попробую. – user2202098

0

Как насчет select top 2 symbol, price from table_1 order by date, time?

+0

, который захватывает только 2 строки, что необходимо для циклического преобразования всех символов. если бы у меня было 100 символов, это было бы 200 строк В противном случае мне может понадобиться добавить дополнительный столбец в качестве времени вставки и фильтровать в прошлый час – user2202098

Смежные вопросы