MySQL sẽ bắt đầu các hàm cửa sổ suport như row_number()
trong phiên bản 8.x ( chưa sẵn sàng sản xuất vào ngày 29 tháng 10 năm 2017 ), cho đến lúc đó, sử dụng @variables là một kỹ thuật để bắt chước hiệu ứng:
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
;
Bạn cần nối 3 trường orderid, invs.invoicenumber, HasClientpaid
để bắt chước phân vùng ban đầu của bạn và thứ tự cũng sẽ cần theo 3 cột đó. ORDER BY
là điều cần thiết để điều này hoạt động, nếu bạn cần một số thứ tự cuối cùng khác, hãy sử dụng ở trên làm truy vấn con.