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

Phát hiện và xóa khoảng trống trong chuỗi thời gian

Tôi chỉ tạo một truy vấn:

DELETE FROM mytable 
WHERE company in (
  SELECT Company 
  FROM (
    SELECT Company, 
      COUNT(CASE WHEN value IS NULL THEN 1 END) 
         OVER (PARTITION BY company ORDER BY id 
               ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING) As cnt,
      COUNT(CASE WHEN value IS NULL THEN 1 END) 
         OVER (PARTITION BY company)
      / 
      COUNT(*) 
         OVER (PARTITION BY company) As p50
  ) alias
  WHERE cnt >= 3 OR p50 > 0.5
)

Chỉ mục tổng hợp trên các cột (công ty + giá trị) có thể giúp đạt được tốc độ tối đa của truy vấn này.

CHỈNH SỬA

Truy vấn trên không hoạt động
Tôi đã sửa nó một chút, đây là bản demo: http://sqlfiddle.com/#!15/c9bfe/7
Hai điều đã được thay đổi:
- PHẦN BỞI công ty ĐẶT HÀNG THEO ngày thay vì ĐẶT HÀNG THEO id
- truyền rõ ràng thành số (vì số nguyên đã bị cắt bớt thành 0):
HẾT (PHẦN CỦA CÔNG TY) ::số

  SELECT company, cnt, p50
  FROM (
    SELECT company, 
      COUNT(CASE WHEN value IS NULL THEN 1 END) 
         OVER (PARTITION BY company ORDER BY date 
               ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING) As cnt,
      SUM(CASE WHEN value IS NULL THEN 1 ELSE 0 END) 
         OVER (PARTITION BY company)::numeric
      / 
      COUNT(*) 
         OVER (PARTITION BY company) As p50
    FROM mytable
  ) alias
--  WHERE cnt >= 3 OR p50 > 0.5 

và bây giờ truy vấn xóa sẽ hoạt động:

DELETE FROM mytable 
WHERE company in (
      SELECT company
      FROM (
        SELECT company, 
          COUNT(CASE WHEN value IS NULL THEN 1 END) 
             OVER (PARTITION BY company ORDER BY date 
                   ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING) As cnt,
          SUM(CASE WHEN value IS NULL THEN 1 ELSE 0 END) 
             OVER (PARTITION BY company)::numeric
          / 
          COUNT(*) 
             OVER (PARTITION BY company) As p50
        FROM mytable
      ) alias
    WHERE cnt >= 3 OR p50 > 0.5
)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách thiết lập nguồn dữ liệu SSL của Spring / Heroku / postgres

  2. Cách tìm đường dẫn pg_config

  3. Entity Framework Core jsonb loại cột

  4. không thể tạo khóa chính tự động tăng thêm bằng flask-sqlalchemy

  5. Left-Outer Tham gia vào Postgres Không trả lại giá trị cho Null