获取所选日期范围内的平均小时数

ARr*_*r0w 5 sql-server average date

我有一个订单表,恰好有一列DataType"Datetime",其中包含产品到达公司(客户)的日期和时间,我有多种类型的用户,他们的类型是:Employee,CompanyOwners(customers) ,Dispatchers..etc

我已设法使用以下T-SQL查询获取针对作为公司所有者的特定用户的订单日期范围:

declare @username varchar(130), @DateFrom varchar(10), @DateTo varchar(10)
set @username = 'chabow';set @DateFrom='4/01/2018';set @DateTo='6/30/2018'
;with cte as (
    select count(o.ArrivalDate) as orders_count, cast(o.ArrivalDate as Date) as ArrivalDate
    from view_MembershipUsers msu
    inner join XrefCompanyUsers rfu on  msu.UserName = rfu.UserName
    inner join Company f on f.CompanyID = rfu.CompanyID
    inner join orders o on o.CompanyID = f.CompanyID
    where msu.UserName = @username and
    (o.ArrivalDate >= @DateFrom and  o.ArrivalDate <= @DateTo)
    group  by cast(o.ArrivalDate as Date)
    )
    select *,
    (select max(orders_count)+2 from  cte) as Total
    from cte    
    order by ArrivalDate
Run Code Online (Sandbox Code Playgroud)

我实际需要检索的是产品的平均到达时间以及我从所选日期范围使用上述查询检索到的数据.我无法知道如何在不得到日期差异的情况下从这个日期范围获得平均小时数,因为我需要读取每行的"日期"以获得最准确的平均小时数.

我已经提取了一些样本日期以方便你们帮助我.

create table SelectedData
(ArrivalDate date, ActualDateTime datetime)
insert into SelectedData values
('2018-04-01','2018-04-01 20:45:00.000'),
('2018-04-04','2018-04-04 19:00:00.000'),
('2018-04-05','2018-04-05 14:00:00.000'),
('2018-04-05','2018-04-05 14:23:00.000'),
('2018-04-05','2018-04-05 18:30:00.000'),
('2018-04-06','2018-04-06 12:30:00.000'),
('2018-04-06','2018-04-06 18:08:00.000')

declare @DateFrom varchar(10), @DateTo varchar(10)
    set @DateFrom='4/01/2018';set @DateTo='6/30/2018'

    select *
    from SelectedData   
    order by ArrivalDate
Run Code Online (Sandbox Code Playgroud)

感谢致敬.

Wyn*_*sel 3

将类型更改为 DateTime,而不是 date。像这样 :

drop table SelectedData
create table SelectedData
(ArrivalDate date, ActualDateTime datetime)
insert into SelectedData values
('2018-04-01','2018-04-01 20:45:00.000'),
('2018-04-04','2018-04-04 19:00:00.000'),
('2018-04-05','2018-04-05 14:00:00.000'),
('2018-04-05','2018-04-05 14:23:00.000'),
('2018-04-05','2018-04-05 18:30:00.000'),
('2018-04-06','2018-04-06 12:30:00.000'),
('2018-04-06','2018-04-06 18:08:00.000')

declare @DateFrom varchar(10), @DateTo varchar(10)
set @DateFrom='4/01/2018';set @DateTo='6/30/2018'

select avg(datePart(hour, ActualDateTime))
from SelectedData   
--order by ArrivalDate
Run Code Online (Sandbox Code Playgroud)

然后获取日期中的日期部分,然后求平均值。