返回Netezza SQL中每个组的最大值日期

时间:2018-08-24 17:09:22

标签: sql netezza

+--------+---------+----------+------------+------------+
| CASEID | USER ID | TYPE     |   OPEN_DT  |  CLOSED_DT |
+--------+---------+----------+------------+------------+
|      1 |    1000 |  MA      | 2017-01-01 | 2017-01-07 |
|      2 |    1000 |  MB      | 2017-07-15 | 2017-07-22 |
|      3 |    1000 |  MA      | 2018-02-20 | NULL       |
|      8 |    1001 |  MB      | 2017-05-18 | 2018-02-18 |
|      9 |    1001 |  MA      | 2018-03-05 | 2018-04-01 |
|      7 |    1002 |  MA      | 2018-06-01 | 2018-07-01 |
+--------+---------+----------+------------+------------+

这是我的数据集的一小段。我需要一个查询,该查询仅返回Netezza SQL中每个USER_ID的max(OPEN_DT)行。

因此,鉴于以上所述,结果将是:

 | CASEID | USERID |  TYPE | OPEN_DT    |  CLOSED_DT |
 | 3      |  1000  |  MA   | 2018-02-20 | NULL       |
 | 9      |  1001  |  MA   | 2018-03-05 | 2018-04-01 |
 | 7      |  1002  |  MA   | 2018-06-01 | 2018-07-01 |

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

您可以使用相关子查询:

select t.*
from table t
where open_dt = (select max(t1.open_dt) from table t1 where t1.user_id = t.user_id);

您也可以row_number()

select t.*
from (select *, row_number() over (partition by user_id order by open_dt desc) as seq
      from table t
      ) t
where seq = 1;

但是,如果您与open_dt有联系,则需要将limit子句与相关子查询一起使用,但是我不确定这些联系,所以我就把它保留下来。