Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Konvertierung ROW_NUMBER() ÜBER PARTITION

MySQL wird damit beginnen, Fensterfunktionen wie row_number() zu unterstützen in Version 8.x (noch nicht produktionsreif, Stand 29.10.2017 ), bis dahin ist die Verwendung von @Variablen eine Technik, um den Effekt nachzuahmen:

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
;

Sie müssen die 3 Felder orderid, invs.invoicenumber, HasClientpaid verketten um Ihre ursprüngliche Partitionierung nachzuahmen, und die Reihenfolge muss auch nach diesen 3 Spalten erfolgen. Der ORDER BY ist wichtig, damit dies funktioniert, wenn Sie eine andere endgültige Reihenfolge benötigen, verwenden Sie die obige als Unterabfrage.