postgresql, как группировать, а затем получить first_time и last_time, - PullRequest
0 голосов
/ 24 октября 2018
event     event_time           arrival_time
7333 | 2018-09-09       | 2018-10-09
7444 | 2018-09-10       | 2018-11-09
7333 | 2018-09-11       | 2018-09-09
7555 | 2018-09-12       | 2018-08-09
7555 | 2018-09-13       | 2018-06-09
7333 | 2018-09-15       | 2018-09-09

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

event event_first       arrival_first      event_last     arrival_last
7333 | 2018-09-09       | 2018-08-09       | 2018-09-15  |2018-10-09
7444 | 2018-09-10       | 2018-11-09       | 2018-09-10  |2018-11-09
7555 | 2018-09-12       | 2018-06-09       | 2018-09-13  |2018-08-09

пробовала эту команду:

SELECT DISTINCT ON (event)
        event, event_time as event_first, event_time as event_last, arrival_time as arrival_first, arrival_time as arrvial_last
FROM   A
ORDER  BY event, event_first, event_last DESC, arrival_first, arrvial_last DESC

но это не может работать.

1 Ответ

0 голосов
/ 24 октября 2018

Можно попытаться использовать min получить первый день и max получить последний день.

CREATE TABLE A(
   event int,
   event_time timestamp,
   arrival_time timestamp
);


insert into a values (7333,'2018-09-09','2018-10-09');
insert into a values (7444,'2018-09-10','2018-11-09');
insert into a values (7333,'2018-09-11','2018-09-09');
insert into a values (7555,'2018-09-12','2018-08-09');
insert into a values (7555,'2018-09-13','2018-06-09');
insert into a values (7333,'2018-09-15','2018-09-09');

Запрос 1 :

SELECT event,
    min(event_time) event_first,
    min(arrival_time) arrival_first,
    max(event_time) event_last,  
    max(arrival_time) arrival_last      
FROM A
group by event   

Результаты :

| event |          event_first |        arrival_first |           event_last |         arrival_last |
|-------|----------------------|----------------------|----------------------|----------------------|
|  7444 | 2018-09-10T00:00:00Z | 2018-11-09T00:00:00Z | 2018-09-10T00:00:00Z | 2018-11-09T00:00:00Z |
|  7333 | 2018-09-09T00:00:00Z | 2018-09-09T00:00:00Z | 2018-09-15T00:00:00Z | 2018-10-09T00:00:00Z |
|  7555 | 2018-09-12T00:00:00Z | 2018-06-09T00:00:00Z | 2018-09-13T00:00:00Z | 2018-08-09T00:00:00Z |
...