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

MySQL Konverter ROW_NUMBER() OVER PARTITION

MySQL vil begynde at understøtte vinduesfunktioner såsom row_number() i version 8.x (endnu ikke produktionsklar pr. 29. oktober 2017 ), indtil da er brugen af ​​@variables en teknik til at efterligne effekten:

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
;

Du skal sammenkæde de 3 felter orderid, invs.invoicenumber, HasClientpaid for at efterligne din oprindelige partitionering, og rækkefølgen skal også være efter de 3 kolonner. ORDER BY er afgørende for at dette kan fungere, hvis du har brug for en anden endelig bestilling, brug ovenstående som en underforespørgsel.




  1. Den mest effektive måde at finde punkter inden for en bestemt radius fra et givet punkt

  2. Lagret procedure med valgfri WHERE-parametre

  3. Sådan bruger du array_agg() til varchar[]

  4. Installation af webserver i FreeBSD 6.0 med Apache 2.2, MySQL 5.0 og PHP 5 – Del 3