【问题标题】:sql sum 2 column values and sort records by 3 columnssql求和2列值并按3列对记录进行排序
【发布时间】:2020-07-23 00:48:19
【问题描述】:

我有列 - ip、端口、对、pair_status、长度、length_to_fault、add_date。 我需要按端口对所有内容进行排序,每个端口至少有一对(A、B、C、D)。排序后,我需要进行更多排序 - 我需要在确切的端口对每一对进行排序。

目前我有选择,它可以做我需要的一切,但只是有一个长度。

我想更改此片段,以便它可以检查 - 如果长度 = N/A,则需要 length_to_fault,如果 length_to_fault = N/A,则需要长度。我的想法是将这 2 列合并为 1。此外,每条记录仅在一列上具有值(它可以是长度或 length_to_fault)。到目前为止我有这个-

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,但值在 length_to_fault 之内,因此此选择不会采用该记录。有没有办法编辑这个片段以包含 length_to_fault 呢?也许我可以将这两列合二为一?此外,length/length_to_fault 是数据库中的字符,所以我必须将其更改为在此选择中浮动。

【问题讨论】:

    标签: sql select lead


    【解决方案1】:

    您可以使用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
    

    【讨论】:

    • 有没有办法保留我的选择,但只需添加一些将 length 和 length_to_fault 列组合在一起的东西?两者都是字符,但它们必须是浮点数。而且它们也可能是 N/A,所以它可能会引发错误,我不知道如何删除它
    • @Cris 。 . .这是组合列,至少对于lead()
    • 但是我可以以某种方式定义该组合列,以便我可以在 groovy 脚本中调用它吗?我正在制作 groovy 脚本,我需要从数据库中提取记录......也许我可以将组合列定义为 lengthh,如果我需要在代码中使用长度,我可以用 lengthh 调用它?
    • 等待 - next_length 是 length/length_to_fault 的组合吗?
    • @Cris 。 . .我认为next_length 可以将两者结合起来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多