PostgreSQL получает последнюю запись в функции - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть функция с именем cdr_get_call_log.Я получаю свои данные из этой функции.Как видно из примера, записи данных с номерами 3 и 4 получают одинаковые source_caller_id и в тот же день, но в другое время.Поэтому я хочу, чтобы в моих данных были одинаковые source_caller_id, я хочу получить только запись о том, что start_time самое позднее

select source_caller_id,destination_dn,recording_url,start_time 
from (
  select * 
  from cdr_get_call_log
  where destination_type=0 
    and talking_duration is not null 
    and source_caller_id not like 'Ext%' 
    and source_caller_id like '0%' 
    and destination_dn in('628','627','629','630','631','626','600','632') 
    and source_caller_id<> '09903114243' 
    and subrow_desc_number='1' 
    and trim(recording_url)<> ''
) as a

Структура таблицы

| source_caller_id | destination_dn |   recording_url    |      start_time       |
|------------------|----------------|--------------------|-----------------------|
|    1.05356785544 |            627 | [627]/20180230.wav | 01/12/2018 11.12:39   |
|    2.05551165244 |            632 | [632]/20180230.wav | 04/12/2018 09.12:39   |
|    3.05556665544 |            621 | [627]/20180230.wav | 06/12/2018 05.12:39   |
|    4.05556665544 |            626 | [627]/20180230.wav | 06/12/2018 05.15:39   |

1 Ответ

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

Вы можете использовать distinct on:

with q as (<your query here>)
select distinct on (caller_id, date_trunc('day', start_time)) q.*
from q
order by caller_id, date_trunc('day', start_time), start_time desc;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...