在表中顺序购买,其中顺序对购买者来说是唯一的

问题描述 投票:0回答:2

我在看一个表如下:

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
一样对整个表进行排序。

sql window-functions
2个回答
0
投票

我试过使用带有

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()
更相关。


0
投票

您需要在

PARTITION BY
中添加
ROW_NUMBER()
子句才能开始为新的
CustID

重新编号
SELECT *, ROW_NUMBER() OVER (PARTITION BY CustID ORDER BY Item) rn
FROM MY_TABLE
© www.soinside.com 2019 - 2024. All rights reserved.