PostgreSQL中的不同行中有两列条件

jov*_*cbg 10 sql postgresql

我有一个大约有100列和30000行的表.看起来像这样:

site_id   cell_id   sector_id    value1     value2
  1          1           1          70        23
  1          2           1          40        20
  1          3           1          67        35
  1          5           2          42        60
  1          6           2          65        30
  1          7           2          62        62
  2          11          1          67        11
  2          12          1          45        22
  2          13          1          65        15
Run Code Online (Sandbox Code Playgroud)

对于一个site_id的相同sector_id,如果value1> = 65,那么value2 <25的相同扇区中的任何cell_id将被归类为"LOW_LOAD_CELL".期望的输出将是:

site_id   cell_id   sector_id    value1     value2   cell_status
  1          1           1          70        23     LOW_LOAD_CELL
  1          2           1          40        20     LOW_LOAD_CELL
  1          3           1          67        35
  1          5           2          42        60
  1          6           2          65        30
  1          7           2          62        62
  2          11          1          67        11     LOW_LOAD_CELL
  2          12          1          45        22     LOW_LOAD_CELL
  2          13          1          65        15     LOW_LOAD_CELL
 ...
Run Code Online (Sandbox Code Playgroud)

老实说,我不知道如何在SQL中使用.我已经尝试过WHEN CASE,但是当我需要为value2写条件时,我就堆积了.

Vao*_*sun 8

尝试:

select *
, case when value1>=65 and min(value2) over (partition by site_id, sector_id)<25 then 'LOW_LOAD_CELL' end cell_status 
from your_table
Run Code Online (Sandbox Code Playgroud)


Gor*_*off 7

我认为你真正想要的逻辑是:

select t.*,
       (case when max(value1) over (partition by site_it, sector_id) >= 65 and
                  value2 < 25
             then 'LOW_LOAD_CELL'
        end) as cell_status 
from t ;
Run Code Online (Sandbox Code Playgroud)

这符合您的数据 - 如果扇区/站点组合的任何行具有value165或更高,则当该单元value2小于25 时,该单元是低负载单元.