PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Menghapus catatan dengan nomor yang berulang lebih dari 5

Oke, jadi logikanya di sini bisa diringkas sebagai:

  • Temukan deret terpanjang dari angka berurutan yang sama pada bilangan tertentu; dan
  • Mengembalikan nilai true jika nilai terpanjang adalah> 5 digit

Benar?

Jadi, mari kita bagi menjadi beberapa digit berurutan:

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

lalu filter paling lama:

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)

... tapi sebenarnya kami tidak mempermasalahkan itu, kalau saja ada entri yang lebih panjang dari 5 digit, jadi:

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

dapat digunakan sebagai EXISTS tes, mis.

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
)

yang sebenarnya cukup efisien dan mengembalikan hasil yang benar (selalu menyenangkan). Tapi itu bisa disederhanakan sedikit lagi dengan:

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;
)

Anda dapat menggunakan WHERE yang sama klausa dalam 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. Bagaimana cara saya bekerja dengan desimal presisi tinggi di PHP

  2. Bagaimana Anda mendapatkan tampilan 12 hari kerja yang dinamis di Postgresql?

  3. Dapatkan baris yang diberi halaman dan jumlah total dalam satu kueri

  4. Di PostgreSQL, masalah aneh tentang kinerja kutipan?

  5. Bagaimana saya bisa mencegah/mendeteksi aliran bawah dalam perhitungan Postgresql yang menggunakan EXP ()