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

Làm thế nào để gắn nhãn các nhóm trong postgresql khi thuộc về nhóm phụ thuộc vào dòng trước?

Đ "chọn trong một lựa chọn" thường được gọi là "chọn con" hoặc "truy vấn con" Trong trường hợp cụ thể của bạn, đó là truy vấn con có tương quan . LATERAL tham gia (mới trong postgres 9.3) phần lớn có thể thay thế các truy vấn con tương quan bằng các giải pháp linh hoạt hơn:

Tôi không nghĩ bạn cần cả ở đây.

Đối với trường hợp đầu tiên của bạn tuy nhiên, truy vấn này có lẽ nhanh hơn và đơn giản hơn:

SELECT date, max(value) OVER (PARTITION BY grp) AS value
FROM  (
   SELECT *, count(value) OVER (ORDER BY date) AS grp
   FROM   test_fill_null
   ) sub;

count() chỉ tính các giá trị không rỗng, vì vậy grp được tăng lên với mọi giá trị value , từ đó hình thành các nhóm như mong muốn. Thật tầm thường khi chọn một giá trị value per grp trong SELECT bên ngoài .

Đối với trường hợp thứ hai của bạn , Tôi sẽ giả sử thứ tự ban đầu của các hàng được xác định bởi (id1, id2, tms) như được chỉ ra bởi một trong các truy vấn của bạn.

SELECT id1, id2, tms
     , count(step) OVER (ORDER BY id1, id2, tms) AS group_id
FROM  (
   SELECT *, CASE WHEN lag(tms, 1, '-infinity') OVER (PARTITION BY id1 ORDER BY id2, tms)
                       < tms - interval '5 min'
                  THEN true END AS step
   FROM   table0
   ) sub
ORDER  BY id1, id2, tms;

Thích ứng với đơn đặt hàng thực tế của bạn. Một trong những điều này có thể bao gồm nó:

PARTITION BY id1 ORDER BY id2  -- ignore tms
PARTITION BY id1 ORDER BY tms  -- ignore id2

SQL Fiddle với một ví dụ mở rộng.

Có liên quan:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để khai báo trường postgresql json / jsonb với phần tiếp theo?

  2. Heroku - ActionView ::Template ::Error (PG ::Error:ERROR:column category_products.desc không tồn tại

  3. Sử dụng pg_notify trong hàm kích hoạt PostgreSQL

  4. Làm thế nào để cài đặt luasql trên Linux CentOS 7?

  5. Lưu trữ các băm lồng nhau trong PostgreSQL với Rails 4 (và Hstore)