我正在尝试使用等级来获得每个字母的等级,并使用参数来选择具有功能的等级
例如:这是我的表格数据:
Alphabet Date
A 2019-12-19 12:31:43.633
A 2019-12-19 12:31:43.650
B 2019-11-07 11:37:08.560
select *
from (select alphabet, date,
dense_Rank() over (partition by alphabet order by date) RankOrder
from mytable
) A
group by alphabet, date, RankOrder
having RankOrder = 1
通过使用上面的查询,这是我的结果:
Alphabet Date Rank Order
A 2019-12-19 12:31:43.633 1
B 2019-11-07 11:37:08.560 1
如果我必须使用参数对多个字母执行此操作,该怎么办?使用声明@palphabet int ='A',@ pyear nvarchar(20)= 2019如何将参数添加到上述查询中?
您可以添加where
子句:
select a.*
from(select alphabet,date,dense_Rank() over (partition by alphabet order by date) RankOrder
from mytable mt
where mt.Alphabet = @palphabet and year(mt.date) = @pyear
) a
where RankOrder = 1;
我认为这里不需要带GROUP BY
子句的HAVING
。由于您拥有原始数据而不是合计数据,因此您使用alphabet
仅为每个where RankOrder = 1
返回1行。
注意:您不能使用INT
Alphabet
,因为基表包含文本值。因此,更改变量@palphabet
的类型。