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个回路的下降起始日期是否也在所有回路的下降起始日期内
任何输入都可以。我想我已经解决了:
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小时。如果不是所有的电路,那么不需要做任何数学运算。所以,在你的例子中,所有的停机时间都是不同的。那么,这是怎么回事?还有,这些颜色是干什么用的?我已经更新了这个问题。绿色和黄色表示所有电路的停机时间相同。对不起,伙计,我不知道如何把我的问题排得整整齐齐!将动态地尝试此操作。