Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [SQL Server] Xóa thành viên trùng email giữ bản ghi cũ nhất

    Sau đợt gộp dữ liệu từ ba chiến dịch marketing, bảng thành viên của TIKI xuất hiện nhiều dòng trùng email. Quy tắc làm sạch: với mỗi email, giữ lại bản ghi có id nhỏ nhất (đăng ký sớm nhất) và xóa các bản ghi còn lại.

    Bảng thanhvien:

    Cột Kiểu Ý nghĩa
    id int Mã tự tăng (khóa, duy nhất)
    email varchar(100) Email đăng ký
    ten nvarchar(100) Họ tên

    Cách làm chuẩn: viết CTE đánh số ROW_NUMBER() OVER (PARTITION BY email ORDER BY id) rồi DELETE trực tiếp trên CTE với điều kiện số thứ tự lớn hơn 1.

    Ví dụ

    Email an@gmail.com xuất hiện ở id 1 và id 4 thì id 4 bị xóa, id 1 được giữ.

    • Định dạng đầu vào:

      Script T-SQL tạo bảng thanhvien và chèn dữ liệu.

    • Ràng buộc đầu vào:

      1≤1 \le1≤ số dòng ≤2000\le 2000≤2000; id duy nhất; một email có thể lặp tối đa 20 lần.

    • Định dạng đầu ra:

      Sau DELETE, một SELECT in id, email, ten, sắp xếp theo id tăng dần.

    Ví dụ:

    Đầu vào:

    CREATE TABLE thanhvien (id int, email varchar(100), ten nvarchar(100));
    INSERT INTO thanhvien VALUES (1,'an@gmail.com','Nguyen Van An'),(2,'binh@gmail.com','Tran Van Binh'),(3,'chi@gmail.com','Le Thi Chi'),(4,'an@gmail.com','Nguyen V An'),(5,'binh@gmail.com','T V Binh');

    Đầu ra:

    1	an@gmail.com	Nguyen Van An
    2	binh@gmail.com	Tran Van Binh
    3	chi@gmail.com	Le Thi Chi

    Giải thích:

    Email an@gmail.com có ở id 1 và 4: giữ id 1, xóa id 4. Email binh@gmail.com có ở id 2 và 5: giữ id 2, xóa id 5. Kết quả còn id 1, 2, 3.

    Đang tải editor...