我有一个大约有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写条件时,我就堆积了.
尝试:
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)
我认为你真正想要的逻辑是:
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 时,该单元是低负载单元.
| 归档时间: |
|
| 查看次数: |
234 次 |
| 最近记录: |