СУММА столбца с условием относительно фиксированного значения столбца вручную - PullRequest
0 голосов
/ 25 марта 2020

Это мои исходные данные, где TIMESTAMP_WID относится к ГГГГММДД

enter image description here

Результат вывода, который я пытаюсь достичь, следующий,

enter image description here

Лог c, как показано ниже,

CUR_TIMESTAMP относится,

TO_NUMBER(TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE,'MON'),-2),'YYYYMMDD'))

Код, который я пробовал до сих пор, выглядит следующим образом:

(SELECT 
OUTLET, 
SUM(SALES_VALUE), 
TO_NUMBER(TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE,'MON'),-2),'YYYYMMDD')) AS CUR_TIMESTAMP
FROM SOME_TABLE)
UNION
(SELECT 
OUTLET, 
SUM(SALES_VALUE), 
TO_NUMBER(TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE,'MON'),-3),'YYYYMMDD')) AS CUR_TIMESTAMP
FROM SOME_TABLE)
(SELECT 
OUTLET, 
SUM(SALES_VALUE), 
TO_NUMBER(TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE,'MON'),-4),'YYYYMMDD')) AS CUR_TIMESTAMP
FROM SOME_TABLE)

В приведенном выше запросе sql я могу заполнить то же, что и моя цель, но есть очень важная логика c при расчете СУММА (SALES_VALUE)

Когда,

CUR_TIMESTAMP=20200101 
Then,
SUM(SALES_VALUE) will be calculated for 
TIMESTAMP_WID IN (20200101,20191201,20191101,20191001,20190901,20191001,20190901,20190801)

Когда,

CUR_TIMESTAMP=20201201 
Then,
SUM(SALES_VALUE) will be calculated for 
TIMESTAMP_WID IN (20191201,20191101,20191001,20190901,20191001,20190901,20190801,20190701)

Когда,

CUR_TIMESTAMP=20201101 
Then,
SUM(SALES_VALUE) will be calculated for 
TIMESTAMP_WID IN (20191101,20191001,20190901,20191001,20190901,20190801,20190701,20190601)

Кто-нибудь, пожалуйста, ведите меня

1 Ответ

0 голосов
/ 25 марта 2020

Звучит как совокупная сумма:

select t.*
from (select t.*,
             sum(sales_value) over (partition by outlet order by timestamp_wid) as running_sales_value
      from some_table st
     ) t

Затем можно добавить предложение where, чтобы отфильтровать нужные вам строки. Я думаю:

select t.*
from (select t.*,
             sum(sales_value) over (partition by outlet order by timestamp_wid) as running_sales_value
      from some_table st
     ) t
where timestamp_wid >= TO_NUMBER(TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE, 'MON'), -4), 'YYYYMMDD')) and
      timestamp_wid < TO_NUMBER(TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE, 'MON'), -2), 'YYYYMMDD')) and
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...