sql >> Base de Datos >  >> RDS >> Mysql

MySQL Convertir ROW_NUMBER() SOBRE PARTICIÓN

MySQL comenzará a admitir funciones de ventana como row_number() en la versión 8.x (aún no está lista para la producción al 29 de octubre de 2017 ), hasta entonces usar @variables es una técnica para imitar el efecto:

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
;

Debe concatenar los 3 campos orderid, invs.invoicenumber, HasClientpaid para imitar su partición original, y el orden también deberá ser por esas 3 columnas. El ORDER BY es esencial para que esto funcione, si necesita algún otro pedido final, use lo anterior como una subconsulta.