首页 > 解决方案 > 有没有办法在带有 groupby 的子查询中使用参数并在 sql 查询中使用参数?

问题描述

我正在尝试使用排名来获取每个字母表的排名,并在使用参数的函数中选择该排名

例如:这是我的表格数据:

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

如果我必须使用参数对多个字母执行此操作怎么办?using declare @palphabet int='A',@pyear nvarchar(20)=2019 如何将参数添加到上述查询?

标签: sqlsql-serversubqueryssms

解决方案


您可以添加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 BYwith子句。HAVING由于您有原始数据而不是聚合数据,并且您alphabet使用where RankOrder = 1.

注意:您不能使用INT Alphabet包含文本值的基表。所以,改变变量的类型@palphabet


推荐阅读