MySQL kommer att börja stödja fönsterfunktioner som row_number()
i version 8.x (ännu inte produktionsklar den 29 oktober 2017 ), tills dess att använda @variables är en teknik för att efterlikna effekten:
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
;
Du måste sammanfoga de tre fälten orderid, invs.invoicenumber, HasClientpaid
för att efterlikna din ursprungliga partitionering, och ordningen måste också ske efter de tre kolumnerna. ORDER BY
är viktigt för att detta ska fungera, om du behöver någon annan slutlig beställning använd ovanstående som en underfråga.