Мне нужен запрос, который рассчитывает продажи ТОЛЬКО в определенные часы в долгосрочной перспективе, группируя по дням. На данный момент я использую или, и вывод мне подходит, но я хочу иметь четный месяц, так что это вообще не решение. Конечно, с помощью conactenate в excel легко подготовить долгосрочные «или», но - если это возможно - я хочу иметь его в одном-двух условиях, когда мне нужно только управлять областью данных.

select format(sale_date_time, 'dd/MM'), sum(sale)
from dbo.Sales
where sale_date_time between '2018-10-29 06:00' and '2018-10-29 10:00' or 
sale_date_time between '2018-10-30 06:00' and '2018-10-30 10:00' 
group by format(sale_date_time, 'dd/MM')
-2
Karol 5 Ноя 2018 в 13:26

1 ответ

Лучший ответ

Если я понимаю вопрос - вы можете использовать отдельные условия для частей даты и времени в столбце sale_date_time:

select format(sale_date_time, 'dd/MM'), sum(sale)
from dbo.Sales
where sale_date_time >= '2018-10-01 00:00' 
and sale_date_time < '2018-11-01 00:00' -- all of October
and CAST(sale_date_time as time) >= '06:00:00'
and CAST(sale_date_time as time) <= '10:00:00'
group by format(sale_date_time, 'dd/MM')

Обратите внимание, что преобразованием sale_date_time в time вы запрещаете SQL Server использовать какие-либо индексы, которые могут иметь отношение к этому столбцу, поэтому лучшим вариантом может быть просто сохранение даты и времени продажи. в двух разных столбцах - один для date и один для time.

1
Zohar Peled 5 Ноя 2018 в 10:32