我有一张标题为“公司”的表格,它具有所有公司的日期明智的价格。我想按每个日期的价格列出前n家公司,但'n'的值在不同日期有所不同。SQL按组查询,N不同
例如:我可能需要前10名2014年8月21日,但我可能需要前20 2014年8月22日
我有“N”的在Excel日期列表。请建议如何去这样做
我有一张标题为“公司”的表格,它具有所有公司的日期明智的价格。我想按每个日期的价格列出前n家公司,但'n'的值在不同日期有所不同。SQL按组查询,N不同
例如:我可能需要前10名2014年8月21日,但我可能需要前20 2014年8月22日
我有“N”的在Excel日期列表。请建议如何去这样做
。假定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
让我们尝试下面的脚本,
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
请添加表架构,示例数据,您当前的查询,如果你有一个和你想要的输出,否则这有点太宽泛,无法回答。尽量让用户想要回答他们需要编写有用解决方案的所有内容。 – Tanner 2014-09-23 10:49:52