SQL Top N按组查询,N不同

时间:2014-09-23 10:45:26

标签: sql sql-server group-by

我有一张名为“公司”的表格,其中包含所有公司的日期价格。我想按价格列出每个日期的前n家公司,但是' n'不同的日期有所不同。

例如:2014年8月21日我可能需要排名前10位,但2014年8月22日我可能需要排名前20位

我列出了' n'按日期在excel。请建议如何进行此操作

2 个答案:

答案 0 :(得分:1)

假设DateColDate - 列,您可以ROW_NUMBER使用DENSE_RANKWITH 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

如果它实际上是{{1}}列,您必须截断时间:

cte

答案 1 :(得分:0)

让我们试试下面的剧本,

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