2014-09-23 4 views
0

У меня есть таблица под названием «Компания», которая имеет цены по дате всех компаний. Я хочу перечислить лучшие российские компании по цене за каждую дату, но значение «n» отличается для разных дат.SQL Top N по запросу группы, N разных

Например: я, возможно, потребуется топ-10 на 21 августа 2014 года, но я, возможно, потребуется 20 лучших на 22 августа 2014

У меня есть список «N» по датам первенствует. Пожалуйста, предложите, как идти об этом

+1

Пожалуйста, добавьте схему таблицы, образцы данных, ваш текущий запрос, если у вас есть один и ваш желаемый результат, в противном случае это слишком широк, чтобы ответить. Попробуйте дать пользователям, которые хотят ответить на все, что им нужно, чтобы написать полезное решение. – Tanner

ответ

1

, предполагающих DateCol является в Date -column, вы можете использовать cte с ROW_NUMBER или DENSE_RANK (вкл. Связи)

WITH CTE AS 
(
    SELECT c.*, rn = ROW_NUMBER() OVER (PARTITION BY DateCol ORDER BY Price DESC) 
    FROM dbo.Company c 
) 
SELECT * FROM CTE 
WHERE rn > 0 AND rn <= CASE DateCol 
          WHEN '20140821' THEN 10 
          WHEN '20140822' THEN 20 
          ELSE 10 -- default 
         END 

Если это на самом деле DateTime колонки и у вас есть укоротить время:

How can I group by date time column without taking time into consideration

0

Lets Попробуйте ниже сценария,

If (select COUNT(*) from Company where date=21st August 2014)>0 
begin 
select top 10 * from Company where date=21st August 2014 
end 

If (select COUNT(*) from Company where date= 22nd August 2014)>0 
begin 

select top 20 * from Company where date= 22nd August 2014 
end 
Смежные вопросы