1

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 
4

2 回答 2

4

我几乎不明白你的意思。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
于 2013-10-25T12:28:31.290 回答
2

@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  |
于 2015-10-16T11:35:16.133 回答