SQL服务器查询自定义排序

时间:2014-05-05 19:50:13

标签: sql-server-2008 tsql stored-procedures

我有这个数据集,我想根据特定的状态优先级获取数据。需要帮助来形成查询。 如果订单的最新交易被批准,那么我需要选择那个,否则如果它未被批准,则选择最新的批准/验证的,基于哪个是最新的。 所以在下面的数据中,

对数据的少量补充。如果订单的最新交易被取消,则不应获取订单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

1 个答案:

答案 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 演示