如何有条件地在某些字段中选择行,并在输出中使用最小最大日期

时间:2018-12-20 20:01:02

标签: sql oracle oracle11g

我需要一个来自组(它是id)的min(date1)max(date2)以及与max(date2)相关的其他字段

以下是来源日期的样子

id ------ date1 ------ date2 ------其他数据
-------------------------------------------------- -------
1 ------ 02/12/2018 ------- 01/12/2018 ------ 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 ------ klm

我无法使用分组依据,因为我不想在其他字段上进行分组。

我的预期输出是

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

1 个答案:

答案 0 :(得分:0)

是的,您可以使用分组依据,您只需要对其余的其他数据使用适当的聚合函数,并使用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

Results

| 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 |