Подсчитать столбец на основе повторяющейся (той же) записи другого столбца - PullRequest
0 голосов
/ 05 февраля 2019

Я хочу создать отчет о последних совершенных вызовах на основе недель после последнего вызова и группы вызовов

Фактические данные аналогичны приведенным ниже с идентификатором вызова, датой вызова и группировкой вызовов

callid |  Date   |   Group
----------------------------
1      | 6-1-18  |    a1
2      | 6-1-18  |    a2
3      | 7-1-18  |    a3
4      | 8-1-18  |    a1
5      | 9-1-18  |    a2
6      | 9-1-18  |    a4

Ожидаемые данные должны отображать количество вызовов для каждой группы вызовов, соответствующее номеру недели после последнего вызова

week   |     |
from   |     |
last   |Group|Group
call   |  a1 |  a2
--------------------
1      | 2   |  2 ->number of calls
2      | -   |  - 
3      | 1   |  - 
4      | 2   |  - 
5      | -   |  3  
6      | -   |  -  

Может кто-нибудь, пожалуйста, подскажите мне какое-нибудь решение для этого

1 Ответ

0 голосов
/ 05 февраля 2019

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

with your_table as (
select 1 as "callid", to_date('6-1-18','dd-mm-rr') as "date", 'a1' as "group" from dual
union select 2, to_date('6-1-18','mm-dd-rr'), 'a2' from dual
union select 3, to_date('7-1-18','mm-dd-rr'), 'a3' from dual
union select 4, to_date('8-1-18','mm-dd-rr'), 'a1' from dual
union select 5, to_date('9-1-18','mm-dd-rr'), 'a2' from dual
union select 6, to_date('6-1-18','mm-dd-rr'), 'a4' from dual
),
 data1 as (
select t.*, max(t."date") over (partition by t."group") last_call_dt from your_table t
),
data2 as (select  t.*, round((last_call_dt-t."date")/7,0) as weeks_diff from data1 t)
select * from (
select t.weeks_diff, t."callid", t."group" from data2 t
)
PIVOT
(
  COUNT("callid")
  FOR "group" IN ('a1', 'a2', 'a3','a4')
)
order by weeks_diff

, чтобы попробовать ее с вашей таблицей, просто внесите следующее изменение:

с your_table as (выберите * из my_table), ....

дайте мне знать, как это происходит:)

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