2014-09-23 72 views
0

我有一张标题为“公司”的表格,它具有所有公司的日期明智的价格。我想按每个日期的价格列出前n家公司,但'n'的值在不同日期有所不同。SQL按组查询,N不同

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

我有“N”的在Excel日期列表。请建议如何去这样做

+1

请添加表架构,示例数据,您当前的查询,如果你有一个和你想要的输出,否则这有点太宽泛,无法回答。尽量让用户想要回答他们需要编写有用解决方案的所有内容。 – Tanner 2014-09-23 10:49:52

回答

1

。假定DateColDate -column,你可以使用一个cteROW_NUMBERDENSE_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

让我们尝试下面的脚本,

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