PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Xóa các bản ghi có số lặp lại nhiều hơn 5

OK, vì vậy logic ở đây có thể được tóm tắt là:

  • Tìm chuỗi dài nhất của cùng một chữ số liên tiếp trong bất kỳ số nào đã cho; và
  • Trả về true nếu giá trị dài nhất đó> 5 chữ số

Đúng không?

Vì vậy, hãy chia nó thành một chuỗi các chữ số liên tiếp:

regress=> SELECT regexp_matches('666666689', '(0+|1+|2+|3+|4+|5+|6+|7+|8+|9+)', 'g');
 regexp_matches 
----------------
 {6666666}
 {8}
 {9}
(3 rows)

sau đó lọc lâu nhất:

regress=> 

SELECT x[1] 
FROM regexp_matches('6666666898', '(0+|1+|2+|3+|4+|5+|6+|7+|8+|9+)', 'g') x 
ORDER BY length(x[1]) DESC 
LIMIT 1;

    x    
---------
 6666666
(1 row)

... nhưng thực sự, chúng tôi không thực sự quan tâm đến điều đó, chỉ cần bất kỳ mục nhập nào dài hơn 5 chữ số, vì vậy:

SELECT x[1] 
FROM regexp_matches('6666666898', '(0+|1+|2+|3+|4+|5+|6+|7+|8+|9+)', 'g') x 
WHERE length(x[1]) > 5;

có thể được sử dụng như một EXISTS kiểm tra, ví dụ:

WITH blah(n) AS (VALUES('999999969'),('000000089'),('666666689'),('15552555'))
SELECT n
FROM blah
WHERE EXISTS (
    SELECT x[1] 
    FROM regexp_matches(n, '(0+|1+|2+|3+|4+|5+|6+|7+|8+|9+)', 'g') x 
    WHERE length(x[1]) > 5
)

mà thực sự là khá hiệu quả và trả về kết quả chính xác (luôn luôn tốt đẹp). Nhưng nó có thể được đơn giản hóa hơn một chút với:

WITH blah(n) AS (VALUES('999999969'),('000000089'),('666666689'),('15552555'))
SELECT n
FROM blah
WHERE EXISTS (
    SELECT x[1] 
    FROM regexp_matches(n, '(0{6}|1{6}|2{6}|3{6}|4{6}|5{6}|6{6}|7{6}|8{6}|9{6})', 'g') x;
)

Bạn có thể sử dụng cùng một WHERE mệnh đề trong DELETE .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giải pháp thay thế tốt nhất để đặt lược đồ PostgreSQL bằng PHP PDO

  2. Truy vấn postgres chậm khi tham gia các bảng lớn

  3. Chèn nhiều bản ghi với pg-promise

  4. Hibernate:Chọn một cột chứa dữ liệu nhị phân không nên tải

  5. Làm thế nào để thực hiện các bài kiểm tra đơn vị với cơ sở dữ liệu h2 nơi bpchar được sử dụng?