[英]SQL get max value with date smaller date
我有一张这样的表:
| colA | date | num |
| x | 1.7. | 2 |
| x | 3.7. | 1 |
| x | 4.7. | 3 |
| z | 1.8. | 0 | (edit)
| z | 2.8. | 1 |
| z | 5.8. | 2 |
我想要这样的结果:
| colA | date | maxNum |
| x | 1.7. | null |
| x | 3.7. | 2 |
| x | 4.7. | 2 |
| z | 1.8. | null | (edit)
| z | 2.8. | 0 |
| z | 5.8. | 1 |
因此,我想为日期小于按 colA 分组的日期的每一行设置 max(num)。 这是否可以通过简单的查询实现? 这将是大型数据库上某些计算所需的更大查询的一部分。
编辑:如果组中的日期之前没有值,则 maxNum 应为 null
提前致谢。
使用MAX..KEEP
语法。
select cola,
adate,
max(num) keep ( dense_rank first order by adate ) over (partition by cola ) maxnum,
case when adate = min(adate) over ( partition by cola )
then null
else max(num) keep ( dense_rank first order by adate ) over (partition by cola ) end maxnum_op
from input;
+------+-------+--------+-----------+ | COLA | ADATE | MAXNUM | MAXNUM_OP | +------+-------+--------+-----------+ | x | 1.7 | 2 | | | x | 3.7 | 2 | 2 | | x | 4.7 | 2 | 2 | | z | 2.8 | 1 | | | z | 5.8 | 1 | 1 | +------+-------+--------+-----------+
MAXNUM_OP
列显示了您想要的结果,但您从未解释过为什么某些值应该为空。 MAXNUM
列显示了我认为您在帖子文本中描述的结果。
您可以使用first_value
和row_number
分析函数如下:
Select cola,
date,
case when row_number() over (partition by cola order by date) > 1 then
first_value(num) over (partition by cola order by date)
end as maxnum
From your_table;
干杯!!
一种方法是使用子查询。
SELECT t1.cola,
t1.date,
(SELECT max(t2.num)
FROM elbat t2
WHERE t2.cola = t1.cola
AND t2.date < t1.date) maxnum
FROM elbat t1;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.