Получить средний часовой период из выбранного диапазона дат - PullRequest
0 голосов
/ 24 августа 2018

У меня есть таблица заказов, в которой есть столбец DataType «Datetime», который содержит дату и время прибытия продукта в компанию (клиента), и у меня есть несколько типов пользователей, их типы: Employee, CompanyOwners(клиенты), 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

Что мне на самом деле нужно получить, так это средний час прибытия продукта вместе с данными, которые я получил с помощью вышеуказанного запроса из выбранного диапазона дат.Я не знаю, как получить среднее значение в часах из этого диапазона дат, не получая разницы в датах, потому что мне нужно прочитать «дату» в каждой строке, чтобы получить максимально точный средний час.

У меня естьдля удобства извлекли несколько примеров дат, чтобы вы, ребята, помогли мне.

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 Ответ

0 голосов
/ 24 августа 2018

Измените ваш тип на DateTime, а не на дату.Например:

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

А затем получите часть даты в часах от даты, а затем среднюю ее величину.

...