特定时间的销售-长期

时间:2018-11-05 10:26:37

标签: sql sql-server tsql

我需要一个查询,该查询仅按天,长期,按日分组计算销售额。目前,我正在使用or,并且输出对我来说很好,但是我希望有一个月,所以根本不是解决方案。当然,在excel中用conactenate编写长期的“或”很容易,但是-如果可能的话-当我只需要操纵数据作用域时,我希望将它放在一两个条件下。

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')

1 个答案:

答案 0 :(得分:0)

假设我理解了这个问题-您可以在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