sql >> データベース >  >> RDS >> Mysql

MySQL Convert ROW_NUMBER()OVER PARTITION

    MySQLは、row_number()などのウィンドウ関数のサポートを開始します。 バージョン8.x(2017年10月29日時点でまだ本番環境に対応していません )、それまでは@variablesを使用することは、効果を模倣するための手法です:

    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
    ;
    

    3つのフィールドorderid, invs.invoicenumber, HasClientpaidを連結する必要があります 元のパーティションを模倣するために、順序付けもこれらの3つの列で行う必要があります。 ORDER BY これが機能するためには不可欠です。他の最終的な順序付けが必要な場合は、上記をサブクエリとして使用してください。




    1. MySQLでSUM()で注文するにはどうすればよいですか?

    2. Oracle ORA-04068で頻繁に発生するエラー:パッケージの既存の状態が破棄されました

    3. mysqlのループを使用して別のテーブルからデータを挿入します

    4. 挿入コマンドを実行し、挿入されたIDをSQLに返します