Переместить субботу в пятницу, затем AVG - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть таблица, с которой я работаю, это около 165M строк данных - работа над созданием среднесуточного использования, но только для рабочей недели. Мне нужно взять операции инвентаризации с субботы, подсчитать их в пятницу и взять воскресенье, перенесенное в понедельник.

CREATE TABLE #temptable ( [ITEMID] nvarchar(20), [Daily Usage] decimal(38,10), [CalendarDate] date )
INSERT INTO #temptable
VALUES
( N'A24519-01', 0.0000000000, N'2019-02-18T00:00:00' ), 
( N'A24519-01', 7.0000000000, N'2019-02-19T00:00:00' ), 
( N'A24519-01', 10.0000000000, N'2019-02-20T00:00:00' ), 
( N'A24519-01', 4.0000000000, N'2019-02-21T00:00:00' ), 
( N'A24519-01', 11.0000000000, N'2019-02-22T00:00:00' ), 
( N'A24519-01', 0.0000000000, N'2019-02-23T00:00:00' ), 
( N'A24519-01', 0.0000000000, N'2019-02-24T00:00:00' ), 
( N'A24519-01', 9.0000000000, N'2019-02-25T00:00:00' ), 
( N'A24519-01', 5.0000000000, N'2019-02-26T00:00:00' ), 
( N'A24519-01', 8.0000000000, N'2019-02-27T00:00:00' ), 
( N'A24519-01', 17.0000000000, N'2019-02-28T00:00:00' ), 
( N'A24519-01', 0.0000000000, N'2019-03-01T00:00:00' ), 
( N'A24519-01', 1.0000000000, N'2019-03-02T00:00:00' ), 
( N'A24519-01', 0.0000000000, N'2019-03-03T00:00:00' ), 
( N'A24519-01', 1.0000000000, N'2019-03-04T00:00:00' ), 
( N'A24519-01', 12.0000000000, N'2019-03-05T00:00:00' ), 
( N'A24519-01', 4.0000000000, N'2019-03-06T00:00:00' ), 
( N'A24519-01', 14.0000000000, N'2019-03-07T00:00:00' ), 
( N'A24519-01', 0.0000000000, N'2019-03-08T00:00:00' ), 
( N'A24519-01', 0.0000000000, N'2019-03-09T00:00:00' ), 
( N'A24519-01', 0.0000000000, N'2019-03-10T00:00:00' ), 
( N'A24519-01', 4.0000000000, N'2019-03-11T00:00:00' ), 
( N'A24519-01', 9.0000000000, N'2019-03-12T00:00:00' ), 
( N'A24519-01', 6.0000000000, N'2019-03-13T00:00:00' ), 
( N'A24519-01', 0.0000000000, N'2019-03-14T00:00:00' ), 
( N'A24519-01', 14.0000000000, N'2019-03-15T00:00:00' ), 
( N'A24519-01', 1.0000000000, N'2019-03-16T00:00:00' ), 
( N'A24519-01', 0.0000000000, N'2019-03-17T00:00:00' )

Так что, если я выполню описанное выше, я получу 4.89

SELECT AVG(1 * [Daily Usage]) 
FROM #temptable 

Я пытаюсь получить 6,85 - я не знаю, как перевести число из сб / вс в пт / пн - они убирают выходные из #temptable

1 Ответ

0 голосов
/ 25 февраля 2020

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

--Move Saturday data into Friday and move Sunday data into Monday (Working days for buyers...)
UPDATE
    EDU
SET
    EDU.[Daily Usage] = EDU.[Daily Usage] + ND.[Daily Usage]
FROM #ExplodedDailyUsage                                    AS EDU
INNER JOIN (SELECT
                t.ITEMID
              , t.[Daily Usage]
              , t.CalendarDate
              , DATEPART(dw, t.CalendarDate)                                                                             DOW
              , DATEADD(
                    DAY, CASE DATEPART(WEEKDAY, t.CalendarDate) WHEN 7 THEN -1 WHEN 1 THEN 1 ELSE 0 END, t.CalendarDate) AS NewDate
            FROM #ExplodedDailyUsage AS t
            WHERE DATEPART(dw, t.CalendarDate) IN ( 7, 1 )) ND ON ND.NewDate = EDU.CalendarDate
                                                                  AND ND.ITEMID = EDU.ITEMID;

--Delete Saturdays and Sundays
DELETE FROM #ExplodedDailyUsage WHERE DATEPART(dw, CalendarDate) IN ( 7, 1 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...