Свернуть доход до даты в эту дату в sql - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть таблица «S8», отображающая дату выпуска (это суббота недели, в которую они были выпущены), проданные единицы, доход и предполагаемые недели поставки для нескольких книг.Эти значения генерируются на еженедельной основе (конец субботы)

BOOKTITLE,BOOKDESCRIPTION,BOOKTYPE,RETAILER,WEEKSOLD,RELEASEDATEWEEK,UNITSSOLD,REVENUE,WEEKSOFSUPPLY
A,AAAAAAA,ORIGINAL,AMAZON,4/6/2019,4/20/2019,2,10,10
A,AAAAAAA,ORIGINAL,AMAZON,4/13/2019,4/20/2019,3,15,9
A,AAAAAAA,ORIGINAL,AMAZON,4/20/2019,4/20/2019,4,20,9
A,AAAAAAA,ORIGINAL,AMAZON,4/27/2019,4/20/2019,1,5,10
A,AAAAAAA,ORIGINAL,AMAZON,5/4/2019,4/20/2019,1,5,8
A,AAAAAAA,ORIGINAL,B&N,4/6/2019,4/20/2019,2,10,7
A,AAAAAAA,ORIGINAL,B&N,4/13/2019,4/20/2019,8,40,5
A,AAAAAAA,ORIGINAL,B&N,4/20/2019,4/20/2019,5,25,6
A,AAAAAAA,ORIGINAL,B&N,4/27/2019,4/20/2019,6,30,6
A,AAAAAAA,ORIGINAL,B&N,5/4/2019,4/20/2019,4,20,10
B,BBBBBBBB,SEQUEL,AMAZON,4/6/2019,4/13/2019,4,20,1
B,BBBBBBBB,SEQUEL,AMAZON,4/13/2019,4/13/2019,5,25,2
B,BBBBBBBB,SEQUEL,AMAZON,4/20/2019,4/13/2019,3,15,4
B,BBBBBBBB,SEQUEL,AMAZON,4/27/2019,4/13/2019,4,20,4
B,BBBBBBBB,SEQUEL,AMAZON,5/4/2019,4/13/2019,8,40,5
B,BBBBBBBB,SEQUEL,B&N,4/6/2019,4/13/2019,2,10,3
B,BBBBBBBB,SEQUEL,B&N,4/13/2019,4/13/2019,6,30,7
B,BBBBBBBB,SEQUEL,B&N,4/20/2019,4/13/2019,4,20,4
B,BBBBBBBB,SEQUEL,B&N,4/27/2019,4/13/2019,4,20,4
B,BBBBBBBB,SEQUEL,B&N,5/4/2019,4/13/2019,3,15,5

. В целях отчетности мне необходимо создать представление, которое объединяет все предпродажные операции (покупки книг, происходящие за недели до недели).выпуск) в первую неделю продаж.

Чтобы уточнить, у каждой книги есть период предварительной продажи, когда вы можете приобрести книгу до ее фактического выпуска.Мне нужно создать представление, в котором все те предварительные продажи, которые происходят до даты выпуска, добавляются в первую неделю продаж.Поэтому, если книга продала 4 единицы в течение недели выпуска и 10 единиц в течение периода предварительной продажи, мне нужно сообщить о неделе 1 как 14 единиц и удалить даты до недели выпуска из набора данных.

Пример:

BOOKTITLE,BOOKDESCRIPTION,BOOKTYPE,RETAILER,WEEKSOLD,RELEASEDATEWEEK,UNITSSOLD,REVENUE,WEEKSOFSUPPLY
A,AAAAAAA,ORIGINAL,AMAZON,4/20/2019,4/20/2019,9,45,9
A,AAAAAAA,ORIGINAL,AMAZON,4/27/2019,4/20/2019,1,5,10
A,AAAAAAA,ORIGINAL,AMAZON,5/4/2019,4/20/2019,1,5,8
A,AAAAAAA,ORIGINAL,B&N,4/20/2019,4/20/2019,15,75,6
A,AAAAAAA,ORIGINAL,B&N,4/27/2019,4/20/2019,6,30,6
A,AAAAAAA,ORIGINAL,B&N,5/4/2019,4/20/2019,4,20,10
B,BBBBBBBB,SEQUEL,AMAZON,4/13/2019,4/13/2019,9,45,2
B,BBBBBBBB,SEQUEL,AMAZON,4/20/2019,4/13/2019,3,15,4
B,BBBBBBBB,SEQUEL,AMAZON,4/27/2019,4/13/2019,4,20,4
B,BBBBBBBB,SEQUEL,AMAZON,5/4/2019,4/13/2019,8,40,5
B,BBBBBBBB,SEQUEL,B&N,4/13/2019,4/13/2019,8,40,7
B,BBBBBBBB,SEQUEL,B&N,4/20/2019,4/13/2019,4,20,4
B,BBBBBBBB,SEQUEL,B&N,4/27/2019,4/13/2019,4,20,4
B,BBBBBBBB,SEQUEL,B&N,5/4/2019,4/13/2019,3,15,5

Я могу сгенерировать сводки единиц / доходов, используя этот запрос:

SELECT BOOKTITLE,BOOKDESCRIPTION,BOOKTYPE,RETAILER,RELEASEDATEWEEK, SUM(UNITSSOLD), SUM(REVENUE)
  FROM S8
  WHERE WEEKSOLD <= RELEASEDATEWEEK
  GROUP BY BOOKTITLE,BOOKDESCRIPTION,BOOKTYPE,RETAILER,RELEASEDATEWEEK

Я не уверен, как использовать представление, чтобы заменить значения свернутымизначения там, где это уместно, и я не могу понять, как сохранить только самые последние недели поставок (нет необходимости их агрегировать, мне нужна только самая последняя из них на неделе с датой выпуска)

1 Ответ

1 голос
/ 18 апреля 2019

Как насчет условного "если дата weeksold предшествует дате releasedateweek, то использовать дату releasedateweek, в противном случае использовать дату weeksold"? В SQL это будет выглядеть примерно так: CASE WHEN WEEKSOLD < RELEASEDATEWEEK THEN RELEASEDATEWEEK ELSE WEEKSOLD END AS ROLLED_SOLD. Затем вы можете суммировать и группировать по этому, учитывая, что у вас есть дата выпуска в каждой строке S8:

SELECT 
  BOOKTITLE, 
  BOOKDESCRIPTION,
  BOOKTYPE,
  RETAILER,
  CASE WHEN WEEKSOLD < RELEASEDATEWEEK THEN RELEASEDATEWEEK ELSE WEEKSOLD END AS ROLLED_SOLD, 
  SUM(UNITSSOLD), 
  SUM(REVENUE)
FROM S8
GROUP BY 
  BOOKTITLE, 
  BOOKDESCRIPTION,
  BOOKTYPE,
  RETAILER,
  CASE WHEN WEEKSOLD < RELEASEDATEWEEK THEN RELEASEDATEWEEK ELSE WEEKSOLD END AS ROLLED_SOLD

Надеюсь, это даты, а не «строки, похожие на даты». Если это строки, то

  1. сурово наказывайте себя;)
  2. преобразовать их в даты (либо изменить тип столбца и сохранить их как даты (желательно), либо преобразовать их на лету (тьфу))
...