MySQL commencera à prendre en charge les fonctions de fenêtre telles que row_number()
dans la version 8.x (pas encore prêt pour la production au 29 octobre 2017 ), jusque-là l'utilisation de @variables est une technique pour imiter l'effet :
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
;
Vous devez concaténer les 3 champs orderid, invs.invoicenumber, HasClientpaid
pour imiter votre partitionnement d'origine, et l'ordre devra également être par ces 3 colonnes. Le ORDER BY
est essentiel pour que cela fonctionne, si vous avez besoin d'un autre ordre final, utilisez ce qui précède comme sous-requête.