首页 > 解决方案 > 特定时间的销售 - 长期

问题描述

我需要查询,它只计算长期特定时间内的销售额,按天分组。现在,我正在使用 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')

标签: sqlsql-servertsql

解决方案


假设我理解这个问题 - 您可以在列的日期和时间部分使用单独的条件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_timetime您会阻止 SQL Server 使用可能与此列相关的任何索引 - 因此更好的选择可能是将销售日期和时间存储在两个不同的列中 - 一个用于date,一个用于time.


推荐阅读