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
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
我幾乎沒有理解你的意思,下面的輸出。 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
@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 |
發佈您的原始數據。 – Mihai
MySQL中的[ROW \ _NUMBER()]的可能重複(http://stackoverflow.com/questions/1895110/row-number-in-mysql)以及其他一些在MySQL中尋找「窗口函數」的問題。 – pilcrow