MySQL ще започне да поддържа прозоречни функции като row_number()
във версия 8.x (все още не е готова за производство към 29 октомври 2017 г. ), дотогава използването на @variables е техника за имитиране на ефекта:
SELECT
@row_num :=IF(@prev_value=concat_ws('',orderid, invs.invoicenumber, HasClientpaid),@row_num+1,1)AS RowNumber
, orderid
, invs.[InvoiceID]
, invs.[InvoiceDate]
, invs.[InvoiceNumber]
, invs.[HasClientPaid]
, @prev_value := concat_ws('',orderid, invs.invoicenumber, HasClientpaid)
FROM InvoiceLineItems Ilt
JOIN Invoices Invs ON Ilt.InvoiceID = invs.InvoiceID
CROSS JOIN (SELECT @row_num :=1, @prev_value :=0) vars
ORDER BY
orderid, invs.invoicenumber, HasClientpaid
;
Трябва да свържете 3-те полета orderid, invs.invoicenumber, HasClientpaid
за да имитира оригиналното ви разделяне и подреждането ще трябва да бъде и по тези 3 колони. ORDER BY
е от съществено значение, за да работи това, ако имате нужда от друго окончателно подреждане, използвайте горното като подзаявка.