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
これが機能するためには不可欠です。他の最終的な順序付けが必要な場合は、上記をサブクエリとして使用してください。