Рассчитать время прокрутки с момента события для каждой записи в SQL - PullRequest
0 голосов
/ 07 февраля 2019

Я работаю над запросом, чтобы рассчитать время с момента последнего профилактического обслуживания (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, первая запись является разницей от недели 5 2018 в Таблице 2 до недели 10 2018. Для второй записи оборудования 2069186«Время с последнего вечера» должно быть разницей между неделей 21 2018 года в таблице 1 и неделей 20 2018 года в таблице 2. Для оборудования 1626930 первой записью должна быть разница с недели 9 2018 года в таблице 1 до недели 40 2017 года в таблице 2.Для оборудования 1626930 вторая запись должна быть разницей от недели 3 2019 в Таблице 1 до недели 40 2018 в Таблице 2. Имейте в виду, что я хочу, чтобы разница между текущей записью в Таблице 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

Есть какие-нибудь предложения о том, как правильно объединить две таблицы и сделать расчет?Или есть способ использовать временные таблицы и переменные, которые кто-нибудь может предложить?Любой вклад будет оценен!

1 Ответ

0 голосов
/ 07 февраля 2019

Вы можете использовать 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

Расчет разницы между неделями будет сложным, и для этого вам понадобится количество недель в предыдущем году.

...