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

Giá trị cột tăng dần theo điều kiện nhất định trong truy vấn SQL trên Postgresql

Sử dụng lag() và tổng tích lũy:

with query as (
select w.*,
       sum(case when week < prev_week + 2 then 0 else 1 end) over (partition by animal order by week) as grp
from (select w.*,
             lag(week) over (partition by animal order by week) as prev_week
      from test.walk w
     ) w
)
select
    animal, week, grp,
    dense_rank() over (order by animal, grp) as grp2
from query

Lưu ý:Thao tác này sẽ bắt đầu lại quá trình đếm cho từng con - đây dường như là ý định thực sự của những gì bạn muốn làm. Định nghĩa của vấn đề là một chút phức tạp nếu bạn muốn các nhóm được phân tách theo động vật, nhưng phải tăng dần. Một phương pháp là:

select w.*,
       sum(case when prev_week = week then 0 else 1 end) over (order by min_week, animal, week) as grp
from (select w.*,
             lag(week) over (partition by animal order by week) as prev_week,
             min(week) over (partition by animal) as min_week
      from test.walk w
     ) w;



  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ập nhật các bản ghi hiện có bằng một số nguyên duy nhất

  2. Làm việc với Postgres / PostGIS View trong SQLAlchemy

  3. Xóa các bản sao khỏi bảng và liên kết lại các hàng tham chiếu với trang cái mới

  4. LỖI:chuỗi được trích dẫn chưa kết thúc tại hoặc gần

  5. Kết hợp hai cột và thêm vào một cột mới