为 SQL 中的每条记录计算事件以来的滚动时间
Calculate the rolling time since an event for each record in SQL
我正在处理一个查询,以计算滚动日历上每台设备自最近一次预防性维护 (PM) 以来的时间。目标是建立一个数据框来分析何时进行维修。
下面是我使用添加的列 "Time Since Last PM" 得到的查询结果的 table,这是我想要的列。
称这个 Table 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
预防性维护数据来自 query/table,其设置如下,即 Table 2.
Equipment Number |Year |WeekNumber
2069186 |2018 |5
2069186 |2018 |20
1626930 |2017 |40
1626930 |2018 |40
所以我需要确保对于我的最终查询,Table 1,设备 2069186 的“自上次下午以来的时间”第一条记录与 Table 2 中的 2018 年第 5 周不同到 2018 年第 10 周。对于设备 2069186 的第二条记录,“自上次下午以来的时间”应该是 Table1 中的 2018 年第 21 周和 Table2 中的 2018 年第 20 周之间的差异。对于设备 1626930,第一条记录应该是 Table1 中的 2018 年第 9 周与 Table2 中的 2017 年第 40 周的差异。对于设备 1626930,第二条记录应该是 Table1 中的 2019 年第 3 周的差异到 Table 2 中的 2018 年第 40 周。请记住,我想要 Table 1 中的当前记录与 Table 1 中的年份和周之前的最新 PM 之间的差异。
Table 1 和 Table 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
关于加入两个 table 并进行计算的正确方法有什么建议吗?或者有没有办法利用任何人都可以建议的 temp tables 和变量?如有任何意见,我们将不胜感激!
您可以使用 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
计算周数差异会很棘手,为此您需要前一年的周数。
我正在处理一个查询,以计算滚动日历上每台设备自最近一次预防性维护 (PM) 以来的时间。目标是建立一个数据框来分析何时进行维修。
下面是我使用添加的列 "Time Since Last PM" 得到的查询结果的 table,这是我想要的列。
称这个 Table 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
预防性维护数据来自 query/table,其设置如下,即 Table 2.
Equipment Number |Year |WeekNumber
2069186 |2018 |5
2069186 |2018 |20
1626930 |2017 |40
1626930 |2018 |40
所以我需要确保对于我的最终查询,Table 1,设备 2069186 的“自上次下午以来的时间”第一条记录与 Table 2 中的 2018 年第 5 周不同到 2018 年第 10 周。对于设备 2069186 的第二条记录,“自上次下午以来的时间”应该是 Table1 中的 2018 年第 21 周和 Table2 中的 2018 年第 20 周之间的差异。对于设备 1626930,第一条记录应该是 Table1 中的 2018 年第 9 周与 Table2 中的 2017 年第 40 周的差异。对于设备 1626930,第二条记录应该是 Table1 中的 2019 年第 3 周的差异到 Table 2 中的 2018 年第 40 周。请记住,我想要 Table 1 中的当前记录与 Table 1 中的年份和周之前的最新 PM 之间的差异。
Table 1 和 Table 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
关于加入两个 table 并进行计算的正确方法有什么建议吗?或者有没有办法利用任何人都可以建议的 temp tables 和变量?如有任何意见,我们将不胜感激!
您可以使用 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
计算周数差异会很棘手,为此您需要前一年的周数。