Row_number và phân vùng theo có sẵn trong MySQL không?
Câu trả lời là KHÔNG.
Microsoft SQL Server hỗ trợ row_number và phân vùng bằng cách tìm bản ghi duy nhất từ một tập hợp các bản ghi trùng lặp. Chúng tôi cũng có thể đặt thứ tự dữ liệu.
MySQL không cung cấp tính năng này trực tiếp. Chúng ta có thể đạt được điều này bằng cách sử dụng một biến nội tuyến cho các câu lệnh SELECT.
Dưới đây là một minh chứng đầy đủ:
Tôi đã chuẩn bị một vài tập lệnh cho dữ liệu mẫu và quy trình được lưu trữ để tìm các bản ghi duy nhất.
Dưới đây là một minh chứng đầy đủ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /*Create sample database and table with sample data.*/ CREATE DATABASE `Employee`; CREATE TABLE Employee.EmpDuplicate ( EmpRemarkID INTEGER ,EmpID INTEGER ,EmpRemark VARCHAR(50) ); INSERT INTO Employee.EmpDuplicate VALUES (1,25,'abc'),(2,25,'abc'),(3,25,'abc') ,(4,26,'xyz'),(5,27,'pqr'),(6,27,'pqr') ,(7,27,'pqr'),(8,27,'pqr'),(9,28,'xvk') ,(10,28,'xvk'),(11,29,'pqr'),(12,29,'pqr') ,(13,29,'abc'),(14,30,'abc'); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | /*Sample Stored Procedure to find Unique record from the group of duplicate.*/ DELIMITER $$ CREATE PROCEDURE Employee.usp_GETUniqueEmployeeRecords() BEGIN SET @rn1:=1; SET @pk1:=''; SELECT EmpRemarkID ,EmpID ,EmpRemark FROM ( SELECT EmpRemarkID ,EmpID ,EmpRemark ,@rn1 := IF(@pk1=CONCAT(EmpID,EmpRemark), @rn1+1,1) AS rowNumber ,@pk1 := CONCAT(EmpID,EmpRemark) FROM ( SELECT EmpRemarkID ,EmpID ,EmpRemark FROM Employee.EmpDuplicate ) A ) B WHERE rowNumber=1; END$$ DELIMITER ; |
1 2 | /*Execute this Stored Procedure.*/ CALL Employee.usp_GETUniqueEmployeeRecords() |
Các kết quả: