Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL Converter ROW_NUMBER() SOBRE PARTIÇÃO


O MySQL começará a suportar funções de janela como row_number() na versão 8.x (ainda não pronta para produção em 29 de outubro de 2017 ), até então usar @variables é uma técnica para imitar o efeito:
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
;

Você precisa concatenar os 3 campos orderid, invs.invoicenumber, HasClientpaid para imitar seu particionamento original, e a ordenação também precisará ser por essas 3 colunas. O ORDER BY é essencial para que isso funcione, se você precisar de alguma outra ordenação final, use o acima como uma subconsulta.