Связано с - PostgreSQL DISTINCT ON с разными ORDER BY
У меня есть покупки в таблице (product_id, purchase_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, и этот результат должен быть отсортирован по порядку потомков по полю purchase_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 |
Итак, строки такие же, но порядок неправильный. Любой способ исправить это?