Как из нескольких значений выбрать последнее

Есть таблица с звонками допустим поле некое структурное описание

Первая таблица:

  1. phone - телефон клиента
  2. date - Дата звонка

Вторая таблица:

  1. client_number - телефон клиента
  2. date - Дата звонка
  3. result - результат звонка

Необходимо выбрать последний результат звонка по номеру клиента

Исходные данные 1 таблицы:

phone date

891итд| 2021-10-10

891итд| 2021-10-12

Исходные данные 2 таблицы:

client_number date result

891итд| 2021-10-10 |перезвонить

891итд| 2021-10-12| согласен


Ответы (1 шт):

Автор решения: Andrew Nikolaev

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

Наполним тестовые данные:

CREATE TABLE UserCalls (client_number VARCHAR(255), call_date DATE, call_result VARCHAR(255));

INSERT INTO UserCalls (client_number, call_date, call_result)
VALUES
('99000010101', '2021-10-10', 'перезвонить'),
('99000010102', '2021-10-11', 'перезвонить'),
('99000010103', '2021-10-12', 'согласен'),
('99000010101', '2021-10-13', 'перезвонить'),
('99000010102', '2021-10-14', 'перезвонить'),
('99000010103', '2021-10-15', 'согласен'),
('99000010101', '2021-10-16', 'согласен'),
('99000010101', '2021-10-17', 'перезвонить'),
('99000010103', '2021-10-18', 'перезвонить'),
('99000010101', '2021-10-19', 'согласен');

Сам запрос:

SELECT 
  SQ.client_number, SQ.call_date, SQ.call_result 
FROM
(
  SELECT RANK() OVER ( PARTITION BY uc.client_number ORDER BY uc.call_date DESC ) AS RankRow,
    uc.client_number, uc.call_date, uc.call_result
  FROM UserCalls uc
) SQ
WHERE SQ.RankRow = 1;
→ Ссылка