Выбор строк, упорядоченных по одному столбцу и отличных от другого

Относится к - PostgreSQL DISTINCT ON с другим ORDER BY

У меня есть таблица Purchases (product_id, Purchased_at, address_id)

Пример данных:

| id | product_id |   purchased_at    | address_id |
| 1  |     2      | 20 Mar 2012 21:01 |     1      |
| 2  |     2      | 20 Mar 2012 21:33 |     1      |
| 3  |     2      | 20 Mar 2012 21:39 |     2      |
| 4  |     2      | 20 Mar 2012 21:48 |     2      |

Ожидаемый результат — самый последний закупленный продукт (полная строка) для каждого address_id, и этот результат должен быть отсортирован в порядке убывания по полю закупки_at:

| id | product_id |   purchased_at    | address_id |
| 4  |     2      | 20 Mar 2012 21:48 |     2      |
| 2  |     2      | 20 Mar 2012 21:33 |     1      |

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

SELECT DISTINCT ON (address_id) purchases.address_id, purchases.*
FROM "purchases"
WHERE "purchases"."product_id" = 2
ORDER BY purchases.address_id ASC, purchases.purchased_at DESC

Я получаю:

| id | product_id |   purchased_at    | address_id |
| 2  |     2      | 20 Mar 2012 21:33 |     1      |
| 4  |     2      | 20 Mar 2012 21:48 |     2      |

Таким образом, строки одинаковы, но порядок неправильный . Как это исправить?

21
задан Mosty Mostacho 10 June 2017 в 17:06
поделиться