ROWNUMBER() с разделом в MYSQLКак получить 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() с разделом в MYSQLКак получить 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 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 |
Опубликуйте свои исходные данные. – Mihai
Возможный дубликат [ROW \ _NUMBER() в MySQL] (http://stackoverflow.com/questions/1895110/row-number-in-mysql) и несколько других вопросов, которые ищут «функции окна» в MySQL. – pilcrow