Выбор данных недельного с помощью (week = текущая временная метка - 7 дней) и т. Д. В db2 - PullRequest
0 голосов
/ 13 января 2019

Я выбираю данные, сгруппированные по неделям.

Мои данные содержат билеты, поднятые неделю, но неделя должна быть текущей отметкой времени - 7 дней.

Поэтому мне нужно рассчитать неделю не с начала, а с конца, а затем двигаться назад до даты начала, т.е. 01-09-2018

Ниже приведен пример того, как мне нужно рассчитать недели:

PreviousWeek: текущая метка времени - 7 дней

Предыдущая неделя - 1: Предыдущая неделя - 7 дней

Предыдущая неделя - 2: (Предыдущая неделя - 1) - 7 дней

и т. Д.

Заполните необходимые данные:

  Week   TicketCount
  11         100
  16         100
  21         100
  26         97
  31         100
   1         77
   6         72

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

Пример данных:

  PROBLEMSINCE          STATUS        INITIATOR_DEPARTMENT
  2018-12-20 19:36:34   CLOSED          MWP-PMT-NR
  2018-12-21 12:35:57   CLOSED          MWP-PMT-NR
  2018-12-19 19:00:00   CLOSED          MWP-PMT-NR
 2018-12-19 22:00:00    CLOSED          MWP-PMT-NR
 2018-12-20 21:00:00    CLOSED          MWP-PMT-NR
 2018-12-20 22:00:00    CLOSED         MWP-PMT-NR
 2018-12-13 16:41:18    CLOSE           MWP-PMT-NR
 2017-12-21 10:30:24    CLOSED          MWP-PMT-NR
 2017-12-29 21:22:37    CLOSED          MWP-PMT-NR
 2017-12-29 21:43:42    CLOSED          MWP-PMT-NR
 2018-01-01 13:58:14    CLOSED          MWP-PMT-NR

Ответы [ 2 ]

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

В зависимости от вашего определения предыдущей недели, вы можете использовать один из следующих SQL.

SQL 1: select week1 , count(*) from ( select int ( ( days (current date) - days(PROBLEMSINCE) ) / 7 ) as week1 from tickets_table where PROBLEMSINCE >= '2018-09-01 00:00:00' ) a group by week1 order by 2 desc

SQL 2: select week1 , count(*) from ( select timestampdiff ( 32 , char ( current timestamp - PROBLEMSINCE ) ) as week1 from tickets_table where PROBLEMSINCE >= '2018-09-01 00:00:00' ) a group by week1 order by 2 desc

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

Что такое 01-09-2018 дата? Лучше использовать формат ISO. Это 1 сентября (2018-09-01) или 9 января (2018-01-09)?

Данные вашего образца абсолютно не соответствуют предоставленному вами результату Запустите следующий оператор как есть.

with t(week_num, ts_start, ts_end) as (
values (1, current timestamp - 7 days, current timestamp)
  union all
select week_num+1, ts_start - 7 days, ts_end - 7 days
from t
where ts_start > date('2018-09-01')
)
select *
from t
order by week_num

Это ожидаемая недельная нумерация?

Если нет, то обновите ваш вопрос с точным ожидаемым номером недели, и сопоставит образец данных и результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...