sql >> Databáze >  >> RDS >> Mysql

MySQL převést ROW_NUMBER() NAD ODDĚLENÍM

MySQL začne podporovat funkce okna, jako je row_number() ve verzi 8.x (k 29. říjnu 2017 ještě není připraveno k výrobě ), do té doby je použití @variables technika k napodobení efektu:

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
;

Musíte zřetězit 3 pole orderid, invs.invoicenumber, HasClientpaid napodobit vaše původní rozdělení a řazení bude muset být také podle těchto 3 sloupců. ORDER BY je nezbytné, aby to fungovalo, pokud potřebujete nějaké další konečné uspořádání, použijte výše uvedený jako dílčí dotaz.




  1. Existuje dobrý způsob, jak provést výpis SQL databáze MySQL v DataGrip?

  2. Problémy s připojením Windows 7 PHP MySQL

  3. PHP:Zobrazení dat tabulky pomocí fetchall()

  4. Forward Engineering MySQL Workbench Error 1064