Помните о трех вещах
- Единственная редкая вещь, которая, если я увижу в вашем коде, это '+28', интервал конечной даты, если я провожу тест с этим + 28.
Результат добавляет к вашему интервалу еще 28 часов, и по этой причине после 21:00 он влияет на ваш запрос (добавьте один день).
declare @dat as datetime=DateAdd(Hour, DateDiff(Hour, 0, '2020-02-15 20:59:00')+28, 0)
declare @dat2 as datetime=DateAdd(Hour, DateDiff(Hour, 0, '2020-02-15 21:00:00')+28, 0)
print (@dat)
print (@dat2)
Результат равен
Feb 17 2020 12:00AM
Feb 17 2020 1:00AM
Я рекомендую использовать между двумя датами с часами, минутами и секундами
select DATEADD(MINUTE, (DATEDIFF(MINUTE, '20000101', DateTime) / 5)*5, '20000101') AS INTERVAL,
max(Part_Count),min(Part_Count),max(Alarm_Light) as Alarmlight,max(PV_Alarm) as Alarm
FROM TestImport
WHERE DateTime between '2020-02-15 21:00:00' AND '2020-02-15 21:20:00'
Group BY DATEADD(MINUTE, (DATEDIFF(MINUTE, '20000101', DateTime) / 5)*5, '20000101')
Дата должна быть рассчитана в листе Excel и отправляется в формате (ГГГГ-ММ-ДД ЧЧ: ММ: СС) или, если это полный день без времени и в дату окончания + 1
Генерирует запрос, заменяя значения и не объединяя строки
Dim Querysql as String
Querysql = "
select DATEADD(MINUTE, (DATEDIFF(MINUTE, '20000101', DateTime) / 5)*5, '20000101') AS INTERVAL,
max(Part_Count),min(Part_Count),max(Alarm_Light) as Alarmlight,max(PV_Alarm) as Alarm FROM TestImport
WHERE DateTime between '${FechaIni}' AND '${FechaFin}'
Group BY DATEADD(MINUTE, (DATEDIFF(MINUTE, '20000101', DateTime) / 5)*5
"
Replace(Querysql, "${FechaIni}", 2020-02-15 21:00:00)
Replace(Querysql, "${FechaFin}", 2020-02-15 21:20:00)
exec comand
Чтобы избежать SQL проверки правильности ввода, значение ввода равно дате и имеет максимальную длину.
мои данные испытаний