Вам необходимо предоставить более подробную информацию о том, как работает ваше 36-часовое окно; это просто любое произвольное 26-часовое окно или они задают интервалы с определенными начальными и конечными точками? Если это последний, вы можете сделать это только с дополнительной таблицей Datetime Periods, чтобы вы могли рассчитать суммы.
Для первого, однако, вы можете посмотреть 36-часовой период до и после каждой продажи, а затем найти максимальное значение этих значений. Самый простой способ сделать это - использовать Table
в excel и следующих формулах SUMIFS
, которые ищут все продажи того же типа, что и в строке со значением Datetime 36 часов (1,5 дня) до или после значения Datetime в данная строка:
Начните с выбора вам данные, а затем вставить таблицу:
затем добавьте два столбца и введите следующие формулы:
Предыдущая 36 часов:
= SUMIFS ([Продажа], [Type], [@ Type], [Datetime], ">" & [@Datetime] -1,5 [Datetime], "< =" & [@Datetime])
Следующая 36 часы работы:
= SUMIFS ([Продажа], [Type], [@ Type], [Datetime], "< "& [@Datetime] +1,5 [Datetime],"> =" & [ @Datetime])
Для этого в SQL с использованием 36 часовых периодов Datetim e вы можете использовать следующее. Я включил как предыдущий, так и следующие 36-часовые периоды, поскольку, глядя только в одном направлении, вы пропустите продажи либо в начале, либо в конце набора данных.Windowed функция не позволяет указать управляемые окна данных, так что вам нужно использовать либо присоединяется или суб-выбирает для достижения того, что вы после:
declare @data table(dt Datetime, Type nvarchar(50), Sale int)
insert into @data
values
('2016/07/25 03:21','A',12)
,('2016/07/25 04:00','B',23)
,('2016/07/25 15:20','B',5)
,('2016/07/26 05:15','A',15)
,('2016/07/26 10:20','A',3)
,('2016/07/26 16:10','B',20)
,('2016/07/27 10:10','B',5)
select a.dt
,a.Type
,a.Sale
,sum(dprev.Sale) as PrevSales
,a.NextSales
from(
-- If you only want the proceeding 36 hour period you can just use this part --
select d.dt
,d.Type
,d.Sale
,sum(dnext.Sale) as NextSales
from @data d
left join @data dnext
on(d.Type = dnext.Type
and dnext.dt between d.dt and dateadd(hour,+36,d.dt)
)
group by d.dt
,d.Type
,d.Sale
-------------------------------------------------------------------------------
) a
left join @data dprev
on(a.Type = dprev.Type
and dprev.dt between dateadd(hour,-36,a.dt) and a.dt
)
group by a.dt
,a.Type
,a.Sale
,a.NextSales
order by a.Type
,a.dt
Можете ли вы вставить ожидаемый вывод. Для работы с общим количеством файлов Excel проверьте этот https://support.office.com/en-us/article/Calculate-a-running-total-170fa72a-a0f4-4476-9708 -5a9f993668e9 – TheGameiswar
У меня нет исходного ввода и вывода. Это был тестовый вопрос. Каким будет ваш подход, независимо от реального входа? – Kenny