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

Kenaikan nilai kolom pada kondisi tertentu dalam query SQL di Postgresql

Gunakan lag() dan jumlah kumulatif:

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

Catatan:Ini akan memulai kembali penghitungan untuk setiap hewan -- yang tampaknya merupakan tujuan sebenarnya dari apa yang ingin Anda lakukan. Definisi masalahnya agak rumit jika Anda ingin kelompok dipisahkan oleh hewan, tetapi menjadi inkremental. Salah satu caranya adalah:

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. Apakah PostGIS secara otomatis mengonversi saat memasukkan WKT?

  2. Pilih catatan pertama jika tidak ada yang cocok

  3. Bagaimana cara menghitung jumlah kumulatif dari bawah ke atas?

  4. Biaya publisitas PostgreSQL gratis

  5. Tabel sebagai argumen dari fungsi PostgreSQL