繁体   English   中英

SQL获取最大值,日期较小

[英]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_valuerow_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM