Я использую код (внизу) для извлечения меток времени и некоторых других данных с сервера sql за указанный день, чтобы сделать диаграмму, просто.
запрос объединяет значения времени в 5-минутные диапазоны, так что, например, все записи 12: 00-12: 05 станут одним результатом и покажут максимальные значения для соответствующих столбцов для этого периода времени.
Проблема, которую я Это означает, что если данные отсутствуют, я хочу, чтобы запрос возвращался с пустыми строками для пропущенных 5-минутных диапазонов. По сути, без этих пробелов мне нужно запустить тонну формул массива в Excel, что делает это вместо нескольких минут. секунда.
, таким образом, общий пример будет таким:
DateTime Parts_Made Alarm_Light
2020-06-01 12:03 5 0
2020-06-01 12:07 6 0
2020-06-01 12:23 8 0
Would return
DateTime Parts_Made Alarm_Light
2020-06-01 12:05 5 0
2020-06-01 12:10 6 0
2020-06-01 12:15 6 0 <-- inserted "missing" row could also be 12:10 - 0 -0 or 12:10 null null I can work around whatever we can come up with
2020-06-01 12:20 6 0 <-- "another" missing row
2020-06-01 12:25 8 0
Моя первоначальная мысль состояла в том, чтобы просто создать таблицу с каждым возможным 5-минутным интервалом времени в дне и объединить ее с результатом для создать пустые строки, где данных не было, но я не мог понять, как заставить их работать в vba / excel.
Код запроса:
selectCmd.ActiveConnection = adoDbConn
selectCmd.CommandText = "SELECT DATEADD(MINUTE, (DATEDIFF(MINUTE, '20000101', DateTime) / 5)*5, '20000101') as Date_Time " & _
" ,max(Part_Count)-min(Part_Count) as PartsMade" & _
", max(Alarm_Light) as Alarmlight" & _
", max(PV_Alarm) as Alarm" & _
" FROM [SMP].[dbo].[33_TestImport] " & _
" Where [DateTime]>= DateAdd(Hour, DateDiff(Hour, 0, '" & DateYMD & "')-0, 0) AND [DateTime]<= DateAdd(Hour, DateDiff(Hour, 0, '" & DateYMD & "')+24, 0) " & _
" AND Machine_Number = " & Machvar & " " & _
" Group BY DATEADD(MINUTE, (DATEDIFF(MINUTE, '20000101', DateTime) / 5)*5, '20000101') "