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

Я пытаюсь написать запрос для достижения ниже результатов из данных таблицы:

  • Результат должен быть разбит на почасовые данные за указанный период времени.
  • количество покупок за тот же период прошлого года
  • Количество покупок за тот же период времени за 3 или 1 неделю / с до
  • Разница в процентах от 1 кулона по сравнению с YOY (тренд за год)
  • Разница в% кулона 1 по сравнению с WOW (тренд неделя за неделей)

Поскольку я новичок, я могу написать запрос для извлечения данных для данных, но я не могу разбить продажи на почасовые данные. Кроме того, я хочу сравнить продажи с данными YOY и WOW за тот же период времени.

Вот запрос для получения данных за день.

select COUNT(*)                               Order_Count_For_The_Day
       FROM
      purchase_Mobile
 WHERE
     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;

Может кто-нибудь изменить запрос и помочь мне получить желаемый результат, упомянутый в пунктах выше, я был бы очень благодарен за всю жизнь?

Я уже пытался извлечь данные из данной таблицы, и я могу получить данные за определенный период времени.

select COUNT(*)                               Order_Count_For_The_Day
       FROM
      purchase_Mobile
 WHERE
     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;
  • Результат должен быть разбит на почасовые данные за указанный период времени.
  • количество покупок за тот же период прошлого года
  • Количество покупок за тот же период времени за 3 или 1 неделю / с до
  • Разница в% в столбце 1 по сравнению с YOY (тренд за год)
  • % разницы в столбце 1 по сравнению с WOW (неделя за неделей)

1 Ответ

0 голосов
/ 13 января 2019

Чтобы получить почасовую информацию, вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...