我正在尝试在属于user_id的所有帐户的历史记录中获取第一笔交易。例如,在user_id = 12656的情况下,account_id = 1553的旧事务可以是064d1777-3783但是在帐户1554的情况下,最旧的tx是0cb4cfb2-44a2
这是表“order”的片段
╔═════════╦════════════╦══════════╦══════════╦═══════╗
║ user_id ║ account_id ║ order_id ║ status ║ test ║
╠═════════╬════════════╬══════════╬══════════╬═══════╣
║ 12656 ║ 1553 ║ 1234 ║ CAPTURED ║ false ║
╠═════════╬════════════╬══════════╬══════════╬═══════╣
║ 12656 ║ 1554 ║ 5678 ║ CAPTURED ║ false ║
╠═════════╬════════════╬══════════╬══════════╬═══════╣
║ 12656 ║ 1554 ║ 91011 ║ PENDING ║ false ║
╠═════════╬════════════╬══════════╬══════════╬═══════╣
║ 12659 ║ 1556 ║ 176344 ║ PENDING ║ true ║
╠═════════╬════════════╬══════════╬══════════╬═══════╣
║ 12660 ║ 1557 ║ 261677 ║ CAPTURED ║ false ║
╠═════════╬════════════╬══════════╬══════════╬═══════╣
║ 12661 ║ 1558 ║ 347010 ║ CAPTURED ║ true ║
╠═════════╬════════════╬══════════╬══════════╬═══════╣
║ 12662 ║ 1559 ║ 432343 ║ CAPTURED ║ false ║
╠═════════╬════════════╬══════════╬══════════╬═══════╣
║ 12663 ║ 1560 ║ 517676 ║ CAPTURED ║ false ║
╚═════════╩════════════╩══════════╩══════════╩═══════╝
表“事务”
相同╔═════════╦════════════╦══════════╦════════════════╦═════════════════════════╗
║ user_id ║ account_id ║ order_id ║ transaction_id ║ creation_date ║
╠═════════╬════════════╬══════════╬════════════════╬═════════════════════════╣
║ 12656 ║ 1553 ║ 1234 ║ 064d1777-3783 ║ 2012-10-03 00:54:35.042 ║
╠═════════╬════════════╬══════════╬════════════════╬═════════════════════════╣
║ 12656 ║ 1554 ║ 5678 ║ 0cb4cfb2-44a2 ║ 2012-05-06 06:33:13.171 ║
╠═════════╬════════════╬══════════╬════════════════╬═════════════════════════╣
║ 12656 ║ 1554 ║ 91011 ║ 164494f1-3226 ║ 2012-05-29 00:49:27.611 ║
╠═════════╬════════════╬══════════╬════════════════╬═════════════════════════╣
║ 12659 ║ 1556 ║ 176344 ║ 064d1777-3784 ║ 2012-07-25 05:32:48.056 ║
╠═════════╬════════════╬══════════╬════════════════╬═════════════════════════╣
║ 12660 ║ 1557 ║ 261677 ║ 0cb4cfb2-44a3 ║ 2012-04-11 00:42:17.176 ║
╠═════════╬════════════╬══════════╬════════════════╬═════════════════════════╣
║ 12661 ║ 1558 ║ 347010 ║ 164494f1-3227 ║ 2012-05-16 08:01:38.666 ║
╠═════════╬════════════╬══════════╬════════════════╬═════════════════════════╣
║ 12662 ║ 1559 ║ 432343 ║ 064d1777-3785 ║ 2012-04-11 00:48:38.499 ║
╠═════════╬════════════╬══════════╬════════════════╬═════════════════════════╣
║ 12663 ║ 1560 ║ 517676 ║ 0cb4cfb2-44a4 ║ 2012-05-06 06:39:33.44 ║
╚═════════╩════════════╩══════════╩════════════════╩═════════════════════════╝
我编写了以下查询:
SELECT order.account_id, order.user_id, tx.transaction_id, MIN(tx.creation_date) AS first_transaction
FROM transaction AS tx
INNER JOIN order AS order ON tx.order_id = order.order_id
WHERE order.test = 'false'
AND order.status = 'CAPTURED'
GROUP BY order.account_id, order.user_id, tx.transaction_id
但这不起作用,我想知道原因。谢谢你的帮助。
答案 0 :(得分:2)
使用distinct on
:
SELECT DISTINCT ON (o.account_id, o.user_id) o.account_id, o.user_id,
tx.transaction_id, tx.creation_date AS first_transaction
FROM transaction tx INNER JOIN
order o
ON tx.order_id = o.order_id
WHERE o.test = 'false' AND o.status = 'CAPTURED'
ORDER BY o.account_id, o.user_id, tx.creation_date ;