Получить последние процентные значения для каждого пункта выдачи

В PostgreSQL можно использовать DISTINCT ON с сортировкой по pickpoint_id и убывающему created. Для одинакового времени задайте дополнительное правило выбора, например максимальный уникальный id.

Короткий ответ

Что ответить на собеседовании

В PostgreSQL можно использовать DISTINCT ON с сортировкой по pickpoint_id и убывающему created. Для одинакового времени задайте дополнительное правило выбора, например максимальный уникальный id.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо написать SQL‑запрос, который возвращает самое свежие значение столбца percent для каждого pickpoint_id. Для каждой записи следует выбрать строку с максимальной датой в поле created. Пример структуры таблицы и ожидаемый результат:

CREATE TABLE pickpoint_tariff (
    id           bigserial,
    created      timestamp DEFAULT now(),
    pickpoint_id bigint,
    percent      numeric
);
 created     | pickpoint_id | percent
-------------+--------------+---------
 2024-01-01  |      1       |   2
 2024-01-01  |      2       |   2
 2024-01-01  |      3       |   2
 2024-01-02  |      1       |   1
 2024-01-02  |      2       |   1
 2024-01-02  |      3       |   3
 2024-01-03  |      1       |   3
 2024-01-03  |      2       |  10
 2024-01-04  |      2       |  20
 2024-01-04  |      3       |  30

Ожидаемый вывод:

1 — 3
2 — 20
3 — 30

Ответ

В PostgreSQL можно использовать DISTINCT ON с сортировкой по pickpoint_id и убывающему created. Для одинакового времени задайте дополнительное правило выбора, например максимальный уникальный id.

Запрос:

SELECT DISTINCT ON (pickpoint_id) pickpoint_id, percent
FROM pickpoint_tariff
WHERE pickpoint_id IS NOT NULL
ORDER BY pickpoint_id, created DESC NULLS LAST, id DESC;

Для примера получатся 1—3, 2—20, 3—30. В схеме bigserial сам по себе не объявляет PRIMARY KEY: для гарантированного tie-breaker id должен быть уникальным. NULL-даты здесь уступают известным; если такие строки нужно исключить полностью, добавьте created IS NOT NULL.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее