最大列值,基于另一列值

时间:2018-01-06 20:41:51

标签: sql postgresql max distinct

我在Postgres中有一个表,我试图根据另一个单元格中的唯一值返回Max列值

我的表目前看起来像这样。

 |---------------------|------------------|
 |      endtime        |       woid       |
 |---------------------|------------------|                 
 |    1515224469053    |         1        |
 |---------------------|------------------|                 
 |    1515224472342    |         1        |
 |---------------------|------------------|
 |    1515224459092    |         2        |
 |---------------------|------------------|                 
 |    1515224429053    |         2        |
 |---------------------|------------------|
 |    1515224402345    |         2        |
 |---------------------|------------------|                 
 |    1515224465033    |         3        |
 |---------------------|------------------|

...我需要在endtime字段中返回Max值,其中woid字段是唯一的。

因此得到的表如下所示:

 |---------------------|--------------|------------------|
 |      endtime        |     woid     |    Max(endtime)  |
 |---------------------|--------------|------------------|              
 |    1515224469053    |       1      |   1515224472342  |
 |---------------------|--------------|------------------|                 
 |    1515224472342    |       1      |   1515224472342  |
 |---------------------|--------------|------------------|
 |    1515224459092    |       2      |   1515224459092  |
 |---------------------|--------------|------------------|                 
 |    1515224429053    |       2      |   1515224459092  |
 |---------------------|--------------|------------------|
 |    1515224402345    |       2      |   1515224459092  |                  
 |---------------------|--------------|------------------|                 
 |    1515224465033    |       3      |   1515224465033  |
 |---------------------|--------------|------------------|

2 个答案:

答案 0 :(得分:1)

http://sqlfiddle.com/#!17/46fcd/1

SELECT *, MAX(endtime) OVER(PARTITION by woid) FROM times;

答案 1 :(得分:0)

按Woid分组并加入以获得相应的max_endtime。

select t1.endtime, t1.woid, t2.max_endtime
from table t1
join (select woid, max(endtime) as max_endtime
     from table t2
     group by woid) t2
on t1.woid = t2.woid