sql - SQL : MAX() OVER (PRITITON BY ... ORDER BY ..) : ORDER BY 子句的工作看起来像
问题描述
我正在尝试使用MAX(case when col4='ABC' then col1 else 0 end) OVER (PARTITION BY col2 order by **col3**)
col1~col2~col3~col4
30 A B1 ABC
35 A A1 ABC
36 A NULL NULL
40 A X1 ABC
50 B M1 ABD
但我得到的结果是 40,但我想要 35 作为我的结果。看起来像
在 MAX 聚合之前未应用 col3 的顺序。还有其他方法吗?
我无法编写row_number()
in where 子句,因为我们正在尝试创建列,并且周围有很多列和复杂的逻辑。
目前我正在尝试它Teradata
,但实际上它将在HIVE
.
解决方案
编辑:已移至子查询中的窗口函数以获取正确的行
样本数据(作为表变量)
declare @t table(col1 int,col2 char(1),col3 char(2),col4 char(3))
insert @t values (30,'A','B1','ABC')
,(35,'A','A1','ABC')
,(36,'A',NULL,NULL)
,(40,'A','X1','ABC')
,(50,'B','M1','ABD')
使用 row_number() 查询以获取要加入的行
select t.*, mx
from @t t
join (
select
col2,
case when col4='ABC' then col1 else 0 end as mx,
row_number() over (PARTITION BY col2 order by case when col3 is null then 1 else 0 end, col3) rn
from @t
) m on m.col2=t.col2 and rn=1
结果:
col1 col2 col3 col4 col2 mx
30 A B1 ABC A 35
35 A A1 ABC A 35
36 A NULL NULL A 35
40 A X1 ABC A 35
50 B M1 ABD B 0
推荐阅读
- javascript - ReactJs:错误:超过最大更新深度。React 限制嵌套更新的数量以防止无限循环
- django - 序列化器验证 - TypeError ...“UniqueTogetherValidator”对象不可迭代
- python-3.x - 如何在熊猫中读取html时定义选定的列名
- http - Golang http 服务文件 - 提供并行下载支持 - contentLength 和接受范围不起作用
- android - 记录 WorkManager 工作人员
- java - SPRING BOOT/未能在 org.springframework.boot:spring-boot-starter:jar:1.0.0.RC5 收集依赖项
- java - 对更小元素的二分搜索
- dictionary - 运行空 Map 时 Map.length 的返回值
- javascript - Vue生成并下载excel文件
- node.js - 升级 Sequelize 包