我有一张名为“公司”的表格,其中包含所有公司的日期价格。我想按价格列出每个日期的前n家公司,但是' n'不同的日期有所不同。
例如:2014年8月21日我可能需要排名前10位,但2014年8月22日我可能需要排名前20位
我列出了' n'按日期在excel。请建议如何进行此操作
答案 0 :(得分:1)
假设DateCol
是Date
- 列,您可以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
如果它实际上是{{1}}列,您必须截断时间:
答案 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