【问题标题】:Calculate the rolling time since an event for each record in SQL计算 SQL 中每条记录发生事件以来的滚动时间
【发布时间】:2019-02-07 14:28:25
【问题描述】:

我正在处理一个查询,以计算滚动日历上每件设备自最近一次预防性维护 (PM) 以来的时间。目标是构建一个数据框来分析何时进行修复。

下面是我的查询结果表,其中添加了“自上次 PM 以来的时间”列,这是我想要的列。

调用此表 1:

EquipmentNumber |Year   |weeknumber |Current Week Repair|Time Since Last PM  
2069186         |2018   |10         |1                  |5  
2069186         |2018   |21         |1                  |1  
1626930         |2018   |09         |1                  |21  
1626930         |2019   |03         |1                  |15  

预防性维护数据来自如下设置的查询/表,即表 2。

Equipment Number |Year  |WeekNumber  
2069186          |2018  |5  
2069186          |2018  |20  
1626930          |2017  |40  
1626930          |2018  |40  

所以我需要确保对于我的最终查询表 1,设备 2069186 的“自上次 PM 以来的时间”第一个记录是从表 2 中的 2018 年第 5 周到 2018 年第 10 周的差异。对于第二个记录设备 2069186 的“自上次 PM 以来的时间”应该是表 1 中的 2018 年第 21 周和表 2 中的 2018 年第 20 周之间的差。对于设备 1626930,第一个记录应该是表 1 中的 2018 年第 9 周到 2017 年第 40 周的差表 2. 对于设备 1626930,第二条记录应该是表 1 中 2019 年第 3 周到表 2 中 2018 年第 40 周的差异。请记住,我想要表 1 中的当前记录与之前的最新 PM 之间的差异表 1 中的年份和星期。

表 1 和表 2 的查询非常基础。

 SELECT   
 DISTINCT EquipmentNumber,
 Year, 
 weeknumber,
 [Current Week Repair]
 FROM TableA

 SELECT 
 EquipmentNumber,
 DatePart(Year, Created) as Year,
 DatePart(Week, Created) as WeekNumber
 FROM TableB

关于连接两个表并进行计算的正确方法有什么建议吗?或者有没有办法利用任何人都可以建议的临时表和变量?任何意见将不胜感激!

【问题讨论】:

  • SQL 服务器版本?
  • 是 Microsoft SQL Server

标签: sql-server tsql dynamic-columns


【解决方案1】:

你可以使用APPLY:

SELECT t1.*, t1.WeekNumber - ca.WeekNumber
FROM t1
OUTER APPLY (
    SELECT TOP 1 Year, WeekNumber
    FROM t2
    WHERE Equipment_Number = t1.Equipment_Number
    AND (
        (Year < t1.Year)
        OR
        (Year = t1.Year AND WeekNumber < t1.WeekNumber)
    )
    ORDER BY Year DESC, WeekNumber DESC
) AS ca

计算周数差异会很棘手,为此您需要上一年的周数。

【讨论】:

  • 成功了!欣赏它。我以前从未听说过 SQL Server 中的“应用”功能,但我需要在以后的项目中了解更多有关它的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
  • 2023-03-14
  • 1970-01-01
  • 2022-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多