首页 > 解决方案 > 如何有条件地为某些字段选择一行,输出中的最小最大日期

问题描述

我需要来自组(即 id)的 min(date1) max(date2) 和下面与 max(date2) 相关的其他字段

是源日期的样子

id ------ date1 ------ date2 ------ 其他数据
---------------------------------------- -----------------
1------2018 年 2 月 12 日------ 2018 年 1 月 12 日------abc
1-- ----08/21/2018-----06/12/2019------def
2------12/01/2018-----03/03/2016 ------ghi
2------12/03/2018------06/30/2020------xyz
2------01/02/2018- ------05/10/2019-----荷航

我无法使用分组依据,因为还有其他我不想分组的字段。

我的预期输出是

id---- min(date1) ----- max(date2) --other-data(关联 max(date2)
-------- -------------------------------
1 ------02/12/2018-----06 /12/2019------def
2 ------01/02/2018 ------ 06/30/2020-----xyz

标签: sqloracleoracle11g

解决方案


是的,您可以使用 group by,您只需对剩余的其他数据使用适当的聚合函数并使用 KEEP 聚合子句来指示要保留组中的哪条记录。这是一个演示它的SQL Fiddle :

查询 1

select id
     , min(date1)
     , max(date2)
     , max(other_data) keep (dense_rank last order by date2) od
  from table1
  group by id

结果

| ID |            MIN(DATE1) |            MAX(DATE2) |  OD |
|----|-----------------------|-----------------------|-----|
|  1 | 2018-02-12 00:00:00.0 | 2019-06-12 00:00:00.0 | def |
|  2 | 2018-01-02 00:00:00.0 | 2020-06-30 00:00:00.0 | xyz |

推荐阅读