Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL Converti ROW_NUMBER() OVER PARTITION

MySQL inizierà a supportare le funzioni della finestra come row_number() nella versione 8.x (non ancora pronta per la produzione al 29 ottobre 2017 ), fino ad allora usare @variables è una tecnica per imitare l'effetto:

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
;

Devi concatenare i 3 campi orderid, invs.invoicenumber, HasClientpaid per imitare il partizionamento originale e anche l'ordine dovrà essere in base a quelle 3 colonne. Il ORDER BY è essenziale per farlo funzionare, se hai bisogno di qualche altro ordine finale usa quanto sopra come sottoquery.