как выбрать строку для некоторых полей условно с минимальными максимальными датами в выходных данных - PullRequest
0 голосов
/ 20 декабря 2018

Мне нужно min (date1) max (date2) для группы (которая является id) и других полей, связанных с max (date2)

ниже, как выглядит исходная дата

id ------ date1 ------ date2 ------ other-data
---------------------------------------------------------
1 ------ 12/12/2018------ 01/12/2018 ------ abc
1 ------ 21/08/2018 ------ 06/12/2019 ------def
2 ------ 12/01/2018 ------ 03/03/2016 ------ ghi
2 ------ 12/03/2018------ 30.06.2020 ------ xyz
2 ------ 01/02/2018 ------ 05/10/2019 ------ klm

Я не могу использовать группирование по, поскольку есть другие поля, по которым я не хочу группировать.

мой ожидаемый результат -

id ---- min (date1) ----- max (date2) - другие данные (связанные с max (date2)
---------------------------------------------------
1 ------ 02/12/2018------ 06/12/2019 ------ def
2 ------ 01/02/2018 ------ 30/30/2020 ----- xyz

1 Ответ

0 голосов
/ 21 декабря 2018

Да, вы можете использовать группирование по, вам просто нужно использовать соответствующие агрегатные функции для остальных ваших данных и использовать агрегатное предложение 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 |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...