PostgreSQL объединяет отображение дубликатов - PullRequest
0 голосов
/ 08 мая 2018

У меня проблема с объединением таблиц, когда я присоединяюсь, возвращаемые результаты дублируются.

Таблица A Поля:

id, name, acccount_number, account_number_other, customer_service_id, temporary, weight, created_at, updated_at

С рядом:

1, X, 1234, 6543, 1, false, 5, '2017-12-12 19:51:06','2017-12-12 19:51:06'

Таблица B Поля:

id, name, account_number, branch_id, type, transaction, total, a_id, created_at, updated_at.

со строками:

1, Y, 5232, 1, Z, 1000, 1000, 1, '2017-12-12 19:51:06', '2017-12-12 19:51:06'
2, Y, 5232, 1, Z, 1000, 1000, 1, '2017-12-12 20:11:00', '2017-12-12 20:11:00'

Мой запрос:

SELECT a.id, a.name, a.weight, b.transaction, b.total, b.name as reference,
    b..type, b.id as reference_id, b.account_number
FROM a INNER JOIN b
    ON b.a_id = a.id
WHERE b.branch_id = 1 AND temporary = false
ORDER BY a.weight DESC, b.total DESC, b.transaction DESC;

Но результат дублируется .... Поскольку в таблице B есть 2 строки, соединенные с таблицей A ... И я просто хотел, чтобы отображалась 1 строка с условиями, выберите только последнюю строку selected_at из таблицы B.

1 Ответ

0 голосов
/ 08 мая 2018

Использование ROW_NUMBER:

SELECT id, name, weight, transaction, total, reference, type, reference_id,
    account_number
FROM
(
    SELECT a.id, a.name, a.weight, b.transaction, b.total, b.name as reference,
        b.type, b.id as reference_id, b.account_number,
        ROW_NUMBER() OVER (PARTITION BY b.id ORDER BY b.created_at DESC) rn
    FROM a
    INNER JOIN b
         ON b.a_id = a.id
    WHERE b.branch_id = 1 AND temporary = false
) t
WHERE t.rn = 1
ORDER BY
    weight DESC, total DESC, transaction DESC;

Для каждого значения id в таблице B будет выбрана запись, соответствующая последнему значению created_at.

...