Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL Convertir ROW_NUMBER() SUR PARTITION

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.