MYSQL 中带分区的 RowNumber()
我想要基于 id-Foreign 键的以下输出
id | Name | rownumber
1 a 1
1 b 2
1 ads 3
2 dsfs 1
2 sadf 2
2 sdfsa 3
2 dfsfs 4
3 dsf 1
3 adsf 2
3 sdd 3
MYSQL 中带分区的 RowNumber()
我想要基于 id-Foreign 键的以下输出
id | Name | rownumber
1 a 1
1 b 2
1 ads 3
2 dsfs 1
2 sadf 2
2 sdfsa 3
2 dfsfs 4
3 dsf 1
3 adsf 2
3 sdd 3
我几乎不明白你的意思。mysql中没有任何RowNumber()
功能,分区与你的要求无关。
它的:
SELECT
t.*,
@cur:= IF(id=@id, @cur+1, 1) AS RowNumber,
@id := id
FROM
t CROSS JOIN
(SELECT @id:=(SELECT MIN(id) FROM t), @cur:=0) AS init
ORDER BY
t.id
@Alma Du,@Chintu 正在谈论 SQL Server,您可以在其中将 row_number + 分区应用于特定字段。
实际示例:假设您有一个名为“customerPurchasesHist”的表,用于存储客户的购买历史记录:
| customerNr | purchaseItem | purchaseDatetime |
| 123 | microwave | 2014-06-05 |
| 123 | television | 2014-09-10 |
| 123 | fridge | 2015-01-10 |
| 1234 | sofa | 2015-01-10 |
(....)
在 SQL Server 中,如果您需要从该表上的每个客户端获取最后两次购买,您所要做的就是:
SELECT * FROM (
SELECT h.*, ROW_NUMBER() OVER (PARTITION BY customerNr ORDER BY purchaseDatetime DESC) AS sequence
FROM customerPurchasesHist h
)T
WHERE 1=1
AND seq <= 2
;
结果将是:
| customerNr | purchaseItem | purchaseDatetime | seq |
| 123 | fridge | 2015-01-10 | 1 |
| 123 | television | 2014-09-10 | 2 |
| 1234 | sofa | 2015-01-10 | 1 |