我在看一个表如下:
Idx | CustID |Item | Date
________________________________
1 | 1 | Black Ink | 2023-01-01
2 | 2 | Red Ink | 2023-01-21
3 | 1 | Black Ink | 2023-01-12
4 | 2 | Red ink | 2023-02-14
我想做的是按照客户的唯一顺序对客户的购买进行排序,如下所示:
Idx | CustID |Item | Date | Sequence
_________________________________________________
1 | 1 | Black Ink | 2023-01-01 | 1
3 | 1 | Black Ink | 2023-01-12 | 2
2 | 2 | Red Ink | 2023-01-21 | 1
4 | 2 | Red ink | 2023-02-14 | 2
如何添加“序列”列?我试过使用带有
ROW_NUMBER() OVER (ORDER BY CustID, Item)
的子选择语句,但它只是像Idx
一样对整个表进行排序。
我试过使用带有
的子选择语句,但它只是像ROW_NUMBER() OVER (ORDER BY CustID, Item)
一样对整个表进行排序。Idx
您的
row_number()
需要一个 partition by
子句,以便每个客户都有自己的迭代器。所以像:
select t.*,
row_number() over(partition by custid order by idx) seq
from mytable t
根据您的实际用例,您可能需要考虑按
date
排序,而不是按 idx
排序。此外,如果可能存在联系,则 rank()
比 row_number()
更相关。
您需要在
PARTITION BY
中添加ROW_NUMBER()
子句才能开始为新的CustID
重新编号
SELECT *, ROW_NUMBER() OVER (PARTITION BY CustID ORDER BY Item) rn
FROM MY_TABLE