sql >> Databasteknik >  >> RDS >> Mysql

MySQL Konvertera ROW_NUMBER() ÖVER PARTITION

MySQL kommer att börja stödja fönsterfunktioner som row_number() i version 8.x (ännu inte produktionsklar den 29 oktober 2017 ), tills dess att använda @variables är en teknik för att efterlikna 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 måste sammanfoga de tre fälten orderid, invs.invoicenumber, HasClientpaid för att efterlikna din ursprungliga partitionering, och ordningen måste också ske efter de tre kolumnerna. ORDER BY är viktigt för att detta ska fungera, om du behöver någon annan slutlig beställning använd ovanstående som en underfråga.




  1. Värdet av data över tid

  2. MySQL GREATEST() Funktion – Hitta det största argumentet i en lista med argument

  3. Hur man får UTC-värde för SYSDATE på Oracle

  4. MySQL BESTÄLLNING EFTER FÄLT med %