Sql 如何获得相同的电路停机时间值?

Sql 如何获得相同的电路停机时间值?,sql,sql-server,Sql,Sql Server,我无法获取此输出数据(请参阅快照) 需要的是在一个客户下获得相同的所有电路停机时间。 我尝试使用以下方法: 使用MaxDownStartDate和MindDownEndDate的Datediff,但如果没有相同的downtime或一天中有多个相同的停机时间,则此选项将不起作用 使用每小时范围(例如00-01、00-02等)的标记作为列,但这太多,无法处理,因为数据是以秒为单位的 使用脚本任务处理每行数据的循环,以通过第二级检查1个回路的下降起始日期是否也在所有回路的下降起始日期内 根据快照:

我无法获取此输出数据(请参阅快照)

需要的是在一个客户下获得相同的所有电路停机时间。 我尝试使用以下方法:

  • 使用MaxDownStartDate和MindDownEndDate的Datediff,但如果没有相同的downtime或一天中有多个相同的停机时间,则此选项将不起作用
  • 使用每小时范围(例如00-01、00-02等)的标记作为列,但这太多,无法处理,因为数据是以秒为单位的
  • 使用脚本任务处理每行数据的循环,以通过第二级检查1个回路的下降起始日期是否也在所有回路的下降起始日期内
根据快照:

DownStartDate-DownEndDate=分钟下降时间(小时:分钟格式) 突出显示的黄色和绿色是客户“TestCustomer”下所有电路的相同下降时间。 这些间隔的总和就是SameDownTime

有什么建议吗?这方面的最佳做法是什么? 在mssql中使用循环/游标是否是一种理想的使用方法? 这是否可以仅通过SQL查询单独处理


任何输入都可以。

我想我已经解决了:

declare @x table(Customer varchar(20), Circuit char(1), DownStartDate datetime, DownEndDate datetime)
insert into @x values
('TestCustomer', 'A', '11/20/2017 00:00:00', '11/20/2017 04:07:00'),
('TestCustomer', 'C', '11/20/2017 01:00:00', '11/20/2017 03:15:00'),
('TestCustomer', 'D', '11/20/2017 01:20:00', '11/20/2017 04:00:00'),
('TestCustomer', 'B', '11/20/2017 02:30:00', '11/20/2017 05:20:00'),
('TestCustomer', 'C', '11/20/2017 20:07:00', '11/20/2017 23:10:00'),
('TestCustomer', 'A', '11/20/2017 21:07:00', '11/21/2017 00:07:00'),
('TestCustomer', 'B', '11/20/2017 21:07:00', '11/20/2017 23:15:00'),
('TestCustomer', 'D', '11/20/2017 22:07:00', '11/20/2017 23:40:00')

select CircuitNo,
       Customer,
       MAX(DownStartDate) as DownStartDate,
       MIN(DownEndDate) as DownEndDate,
       DATEDIFF(minute, MAX(DownStartDate), MIN(DownEndDate)) as [SameDownTime]
from (
    select *, (ROW_NUMBER() over (order by (select NULL)) - 1)/4 + 1 as [CircuitNo] from @x) as a
group by Customer, CircuitNo

这里是尝试:)

请澄清什么应该是输出以及它背后的逻辑:什么应该是电路的开始,什么应该是结束?特定列的含义是什么?示例中的基础。有电路A、B、C、D。需要获得相同的停机时间(指开始和结束日期时间的日期差),如果所有电路在同一天凌晨2点到4点停机,则相同的停机时间为2小时。如果不是所有的电路,那么不需要做任何数学运算。所以,在你的例子中,所有的停机时间都是不同的。那么,这是怎么回事?还有,这些颜色是干什么用的?我已经更新了这个问题。绿色和黄色表示所有电路的停机时间相同。对不起,伙计,我不知道如何把我的问题排得整整齐齐!将动态地尝试此操作。