MySQL vil begynde at understøtte vinduesfunktioner såsom row_number()
i version 8.x (endnu ikke produktionsklar pr. 29. oktober 2017 ), indtil da er brugen af @variables en teknik til at efterligne 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 skal sammenkæde de 3 felter orderid, invs.invoicenumber, HasClientpaid
for at efterligne din oprindelige partitionering, og rækkefølgen skal også være efter de 3 kolonner. ORDER BY
er afgørende for at dette kan fungere, hvis du har brug for en anden endelig bestilling, brug ovenstående som en underforespørgsel.