sql - 有没有办法在带有 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 如何将参数添加到上述查询?
解决方案
您可以添加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
with子句。HAVING
由于您有原始数据而不是聚合数据,并且您alphabet
使用where RankOrder = 1
.
注意:您不能使用INT
Alphabet
包含文本值的基表。所以,改变变量的类型@palphabet
。
推荐阅读
- firebase - 如何使用 Firestore 每 3 小时更改一次文档的某个字段?
- c - Bash源代码中的C函数原型有两个名称?
- python - 在 subparser (argparser) 中自定义 add_argument 帮助
- php - 如何调试“您的 SQL 语法有错误;请查看与您的 MariaDB 服务器版本相对应的手册以获取正确的语法使用”
- algorithm - 以下递归关系的时间复杂度?
- progress - 在 Winwrapbasic 语言中使用弹出窗口显示进度
- node.js - 在 Object.exports.createStatusError 处收到状态为 403 的 http2 标头
- mysql - 使用 DBI 在 R 中进行日期循环查询
- database - 为什么准备好的语句不允许字段和表名作为参数?
- macos - Tmux 2.6 鼠标控制在 MacOS 10.13 终端中不起作用