代码之家  ›  专栏  ›  技术社区  ›  ARr0w

从选定的日期范围中获取平均小时周期

  •  5
  • ARr0w  · 技术社区  · 7 年前

    我有一个order表,它正好有一个数据类型为“Date Time”的列,其中包含产品到达公司(客户)的日期和时间,并且我有多种类型的用户 员工、公司所有者(客户)、调度员等

    我已使用下面的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
    

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

    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
    

    谢谢和问候。

    1 回复  |  直到 7 年前
        1
  •  3
  •   WynDiesel    7 年前

    将类型改为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
    

    然后得到从日期算起的小时的日期部分,然后是平均值。