sql sum 2列值并按3列对记录排序

t5fffqht  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(363)

我有列-ip,port,pair,pair\u status,length,length\u to\u fault,add\u date。我需要按端口对所有内容进行排序,每个端口至少有一对(a、b、c、d)。当它排序时,我需要排序更多-我需要在精确的端口中对每一对进行排序。
目前我有选择,做我需要的一切,但只是长度。
我想改变这个片段,这样它就可以检查-如果长度=n/a,那么它需要长度到断层,如果长度到断层=n/a,那么它需要长度。我的想法是把这两列合并成一列。此外,每个记录只有一列有值(可以是长度或长度\u到\u错误)。到目前为止我有这个-

Select d.*
from (select d.*, lead(length::float) over (partition by port_nbr, pair order by d.add_date) as next_length
      from diags d
      where length !='N/A'
     ) d

这工作得很好,但有些记录的长度为n/a,但值在长度\u到\u的范围内,因此此选择不接受该记录。有没有一种方法可以编辑这个片段来包含长度从\u到\u的错误呢?也许我可以把这两列相加?另外,length/length\ to\ fault是数据库中的字符,所以我必须在这个选择中将其更改为float。

of1yzvn4

of1yzvn41#

你可以使用 case 表达式:

Select d.*
from (select d.*,
             lead( (case when length <> 'N/A' then length else length_to_fault end)::float) over (partition by port_nbr, pair order by d.add_date) as next_length
      from diags d    
     ) d

相关问题