В настоящее время у меня есть база данных sql-сервера с данными, вращающимися вокруг генерации ватт в секунду.Ваттные данные обычно сохраняются во вторых интервалах, но иногда возникают несоответствия, когда они сохраняются с минутным интервалом.Таким образом, вместо сохранения 60 секунд данных создается только одна строка для этого минутного интервала.
Когда я получаю данные ватт между двумя временными точками, я хочу, чтобы они были согласованы в секундах.Если между двумя строками есть минутная разница, есть ли способ реплицировать строку с данными за эту записанную минуту 59 раз (или больше, если интервал больше)?
Мой текущий запрос выглядит так:
SELECT T1.Start_Time, T1.End_Time, T1.watts, T1.RN, T2.Start_Time,
T2.End_Time, T2.watts, T2.RN, DATEDIFF(second, T1.end_time,
T2.end_time) [span (seconds)], t2.Watts - T1.Watts [Diff],
(t2.Watts - T1.Watts)/1000 [Diff Kw]
FROM(select [Start_Time], [End_Time], watts, ROW_NUMBER() OVER (ORDER
BY watts.[Start_Time]) RN ,DATEDIFF(second, start_time, end_time)
span
from dbo.watts
where watts.SubMeter_Id = 21
AND watts.End_Time >= dateadd(S, 1538701191, '1970-01-01')
AND watts.End_Time <= dateadd(S, 1538787591, '1970-01-01')
AND DATEDIFF(second, watts.start_time, watts.end_time)>=1
) AS T1
LEFT JOIN (select [Start_Time], [End_Time], watts, ROW_NUMBER() OVER
(ORDER BY watts.[Start_Time]) RN ,DATEDIFF(second,
start_time, end_time) span
from dbo.watts
where watts.SubMeter_Id = 21
AND watts.End_Time >= dateadd(S, 1538701191, '1970-01-01')
AND watts.End_Time <= dateadd(S, 1538787591, '1970-01-01')
AND DATEDIFF(second, watts.start_time, watts.end_time)>=1
) AS T2
ON T1.RN = T2.RN-1
Пример данных в таблице ватт:
ID | Submeter_Id | Watts | Start_Time | End_Time
3705255 | 19 | 16428779218 | 2018-09-27 07:28:26.000 | 2018-09-27 07:28:27.000
3705256 | 19 | 16428784527 | 2018-09-27 07:28:58.000 | 2018-09-27 07:28:59.000
Пример текущего вывода:
Start_Time | End_Time | watts | RN | Start_Time | End_Time | watts | RN | span (seconds) | Diff | Diff Kw
2018-10-05 01:39:23.000 | 2018-10-05 01:39:24.000 | 2858527031558 | 2362 | 2018-10-05 01:39:24.000 | 2018-10-05 01:39:25.000 | 2858527122527 | 2363 | 1 | 90969 | 90
2018-10-05 01:40:00.000 | 2018-10-05 01:41:00.000 | 2858536311254 | 2364 | 2018-10-05 01:41:00.000 | 2018-10-05 01:42:00.000 | 2858542101255 | 2365 | 60 | 5790001 | 5790
В настоящее время этот запрос выводит все строки между двумя заданными временными метками,Столбец промежутка времени обычно составляет 1 секунду, но иногда вместо этого данные сохраняются в минуту.Я не могу понять, как получить реплицируемые строки, если разница во времени между двумя столбцами превышает 1 секунду.
Любая помощь по этому вопросу будет принята с благодарностью.Заранее спасибо.