我有这个数据集,我想根据特定的状态优先级获取数据。需要帮助来形成查询。 如果订单的最新交易被批准,那么我需要选择那个,否则如果它未被批准,则选择最新的批准/验证的,基于哪个是最新的。 所以在下面的数据中,
对数据的少量补充。如果订单的最新交易被取消,则不应获取订单ID的数据。
我需要获取,事务ID 4,6,11。我该如何编写此查询?我正在使用SQL Server 2008。
OrderId TransactionId Status
1 1 saved
1 2 validated
1 3 amended
*1 4 approved*
2 5 Saved
*2 6 Validated*
2 7 Amended
3 9 saved
3 10 validated
*3 11 approved*
3 12 amended
4 13 saved
4 14 validated
4 15 approved
4 16 canceled
答案 0 :(得分:0)
尝试
SELECT OrderId, TransactionId, Status
FROM
(
SELECT OrderId, TransactionId, Status,
ROW_NUMBER() OVER (PARTITION BY OrderId ORDER BY Status, TransactionId DESC) rnum
FROM table1
WHERE Status IN('approved', 'Validated')
) q
WHERE rnum = 1
输出:
| ORDERID | TRANSACTIONID | STATUS | |---------|---------------|-----------| | 1 | 4 | approved | | 2 | 6 | Validated | | 3 | 11 | approved |
这是 SQLFiddle 演示