sql >> Database >  >> RDS >> Mysql

MySQL Convert ROW_NUMBER() OVER PARTITION

MySQL zal beginnen met het ondersteunen van vensterfuncties zoals row_number() in versie 8.x (nog niet klaar voor productie op 29 oktober 2017 ), tot die tijd is het gebruik van @variables een techniek om het effect na te bootsen:

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
;

U moet de 3 velden orderid, invs.invoicenumber, HasClientpaid samenvoegen om uw oorspronkelijke partitionering na te bootsen, en de volgorde moet ook door die 3 kolommen zijn. De ORDER BY is essentieel om dit te laten werken, als je een andere laatste bestelling nodig hebt, gebruik dan het bovenstaande als een subquery.




  1. Uitvoerbare Java-toepassing (JAR) met database erin verpakt

  2. SQL om lijst met velden te retourneren die niet-NULL-gegevens bevatten

  3. Website down en Twitter-feed

  4. Query in Oracle om te selecteren met subquery