Чтобы получить почасовую информацию, вы можете использовать datepart (HH, Create_Date). Затем используйте GROUP BY эту почасовую информацию.
SELECT COUNT(CREATE_DATE) Order_Count_For_The_Day
,datepart(HH,CREATE_DATE) Order_Hour
,MAX(CREATE_DATE) CurrentDate
FROM purchase_Mobile
CREATE_DATE between to_date('01/02/2018 00:00:00','mm/dd/yyyy hh24:mi:ss') and to_date('01/02/2018 23:59:59','mm/dd/yyyy hh24:mi:ss')
AND status_code >= 99;
GROUP BY datepart(HH,CREATE_DATE)
Для того, чтобы сделать этот год, прошлый год, другие временные рамки - я бы разбил их на их собственные временные таблицы и в конце присоединился к ним. Есть проблемы, которые вам нужно было бы отрегулировать для этого (часы без продаж, часы работы и т. Д., Что, как я сделал, это не уловило), но хотел предложить вам несколько вариантов для начала:
DECLARE @StartDate DateTime = '2018-1-2 00:00:00'
DECLARE @EndDate DateTime = '2018-1-2 23:59:00'
DECLARE @CurrentResults Table
(OrderCount INT
,OrderHour INT
,CurrentDate DATETIME)
INSERT INTO @CurrentResults
SELECT COUNT(CREATE_DATE) Order_Count_For_The_Day
,datepart(HH,CREATE_DATE) Order_Hour
,MAX(CREATE_DATE) CurrentDate
FROM purchase_Mobile
WHERE CREATE_DATE BETWEEN @StartDate AND @EndDate
AND status_code >= 99
GROUP BY datepart(HH,CREATE_DATE)
OPTION (RECOMPILE);
DECLARE @LastYearResults Table
(LastYearOrderCount INT
,LastYearOrderHour INT
,LastYearDate DATETIME)
INSERT INTO @LYResults
SELECT COUNT(CREATE_DATE) LastYearOrderCount
,datepart(HH,CREATE_DATE) LastYearOrderHour
,MAX(CREATE_DATE) LastYearDate
FROM purchase_Mobile
WHERE CREATE_DATE BETWEEN @StartDate-365 AND @EndDate-365
AND status_code >= 99
GROUP BY datepart(HH,CREATE_DATE)
OPTION (RECOMPILE);
DECLARE @LastWeekResults Table
(LastWeekOrderCount INT
,LastWeekOrderHour INT
,LastWeekDate DATETIME)
INSERT INTO @LastWeekResults
SELECT COUNT(CREATE_DATE) Order_Count
,datepart(HH,CREATE_DATE) Order_Hour
,MAX(CREATE_DATE) LastWeekDate
FROM purchase_Mobile
WHERE CREATE_DATE BETWEEN @StartDate-7 AND @EndDate-7
AND status_code >= 99
GROUP BY datepart(HH,CREATE_DATE)
OPTION (RECOMPILE);
Select CR.OrderHour
,CR.OrderCount
,LY.LastYearOrderCount
,LW.LastWeekOrderCount
,CR.CurrentDate
,LY.LastYearDate
,LW.LastWeekDate
FROM @CurrentResults As CR
LEFT JOIN @LastYearResults AS LY ON LY.LastYearOrderHour = CR.OrderHour
LEFT JOIN @LastWeekResults AS LW ON LW.LastWeekOrderHour = CR.OrderHour
ORDER BY CR.OrderHour