2013-10-25 4 views
0

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

Опубликуйте свои исходные данные. – Mihai

+0

Возможный дубликат [ROW \ _NUMBER() в MySQL] (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 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 | 
Смежные вопросы