2013-10-25 24 views
0

ROWNUMBER()的分區,我想基於ID的外鍵如何在MYSQL</p> <p>得到ROWNUMBER()與分區MYSQL

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 
+0

發佈您的原始數據。 – Mihai

+0

MySQL中的[ROW \ _NUMBER()]的可能重複(http://stackoverflow.com/questions/1895110/row-number-in-mysql)以及其他一些在MySQL中尋找「窗口函數」的問題。 – pilcrow

回答

1

我幾乎沒有理解你的意思,下面的輸出。 mysql中沒有RowNumber()函數,而partitioning與你的請求無關。

它是:

SELECT 
    t.*, 
    @cur:= IF([email protected], @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 
1

@Alma杜,@Chintu在談論的SQL Server,你可以申請ROW_NUMBER +分區在特定領域(S)。

實際例子: 試想一下,你有一個表 - 名爲「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 |