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

Posted

技术标签:

【中文标题】返回 Netezza SQL 中每个组的最大值日期【英文标题】:Return Max Value Date for each group in Netezza SQL 【发布时间】:2018-08-24 17:09:21 【问题描述】:
+--------+---------+----------+------------+------------+
| 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 |
+--------+---------+----------+------------+------------+

这是我的数据集的一个 sn-p。我需要一个查询,它只返回 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】:

您可以使用相关子查询:

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 子句与相关子查询一起使用,但我不确定联系,所以我就离开了。

【讨论】:

以上是关于返回 Netezza SQL 中每个组的最大值日期的主要内容,如果未能解决你的问题,请参考以下文章

如何在SQL中返回每个组的增量组编号

如何在 Netezza 中比较日期?

获取每个月 SQL 的组的 MAX 值

每个组的本地最大值的 SQL 排序结果

由于日期格式,将数据从 txt 文件导入 IBM netezza SQL 数据库时出错

返回每个组的最大值,但是当存在平局时,在 MySQL 中返回一个具有较低 id 的值