在db2

时间:2019-01-13 18:30:13

标签: sql db2

我正在选择按周分组的数据。

我的数据包含每周发的票,但该周应为当前时间戳-7天。

所以我需要从周开始而不是从末开始计算周,然后向后移动到开始日期,即2018年1月9日

以下是我如何计算周数的示例:

PreviousWeek:当前时间戳记-7天

PreviousWeek-1:PreviousWeek-7天

PreviousWeek-2:(PreviousWeek-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 :(得分:0)

01-09-2018日期是什么?最好使用ISO格式。是9月1日(2018-09-01)还是1月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

这是预期的周数吗?

如果没有,请使用确切的预期周数以及匹配的示例数据和结果来更新您的问题。

答案 1 :(得分:0)

根据上周的定义,可以使用以下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