【发布时间】:2015-09-21 13:12:20
【问题描述】:
我试图在表中为每个帐户识别最新的合并交易。该表填充了帐户合并,最新的合并交易是较大的 merge_tx_id
源表:
| merge_tx_id | merge_from_id | merge_to_id |
|-------------|---------------|-------------|
| 1 | 546 | 100 |
| 2 | 789 | 802 |
| 3 | 123 | 456 |
| 33 | 456 | 123 |
| 222 | 802 | 789 |
| 333 | 123 | 456 |
merge_tx_id IN (3,33,333) 是基于出现在另一行中的 merge_from_id 或 merge_to_id 的同一帐户,在此示例中,执行了合并,然后稍后再次“取消合并”。最新的 id 应该是 '456'
| merge_tx_id | merge_from_id | merge_to_id |
|-------------|---------------|-------------|
| 3 | 123 | 456 |
| 33 | 456 | 123 |
| 333 | 123 | 456 |
merge_tx_id IN (2,222) 是基于另一行出现的merge_from_id或merge_to_id的同一个账户,最新的是'789'
| merge_tx_id | merge_from_id | merge_to_id |
|-------------|---------------|-------------|
| 2 | 789 | 802 |
| 222 | 802 | 789 |
merge_tx_id IN (1) 与任何其他行都不相关,最新的 id 是 '100'
| merge_tx_id | merge_from_id | merge_to_id |
|-------------|---------------|-------------|
| 1 | 546 | 100 |
我认为我需要将表连接到自身并执行 RANK,但我不清楚如果可以的话,如何在(第 1 列或第 2 列)上执行分区。
想要的结果是
| merge_tx_id | merge_from_id | merge_to_id |
|-------------|---------------|-------------|
| 1 | 546 | 100 |
| 333 | 123 | 456 |
| 222 | 802 | 789 |
【问题讨论】:
标签: sql-server tsql partitioning rank