我正在选择按周分组的数据。
我的数据包含每周发的票,但该周应为当前时间戳-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
答案 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