[英]SQL Top N by group query, N different
我有一个标题为Company的表,其中包含所有公司的按日期排列的价格。 我想按价格列出每个日期中排名前n位的公司,但不同日期的'n'值不同。
例如:我可能需要2014年8月21日前10名,但我可能需要2014年8月22日前20名
我在Excel中按日期列出了“ n”列表。 请建议如何去做
假设DateCol
是Date
-column,您可以使用热膨胀系数与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
列,并且您必须截断时间:
让我们尝试以下脚本,
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.