微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Sql Server行中生成一系列不断变化的序列号

如何解决如何在Sql Server行中生成一系列不断变化的序列号

我需要第一个 TSL 发件人与后续供应商以及下一个 TSL 到下一个后续发件人作为供应商的日期差异

enter image description here

期望的输出

enter image description here

解决方法

您可以通过计算每行上或之后的 'Vendor' 值的数量来为行分配一个分组。然后每个分组以 'Vendor' 结束,您可以在该组内使用窗口函数:

select t.*,(case when sender = 'vendor'
             then datediff(second,min(date) over (partition by grp),max(date) over (partition by grp)
                          ) / (24 * 60 * 60.0)
        end) as diff
from (select t.*,sum(case when sender = 'Vendor' then 1 else 0 end) over (order by id desc) as grp
      from t
     ) t;
,

因此您需要 TSL 更改为 Vendor 的天数差异。您可以按如下方式使用解析函数:

select t.*,case when sender = 'Vendor' 
            then DATEDIFF(hour,date,first_value(date) over (partition by rn - rn_s order by date) ) / 24.0 end as diff
  from
(select t.*,row_number() over (order by date) as rn,row_number() over (partition by sender order by date) as rn_s
  from yout_table t) t
  

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。