Как подсчитать общее количество ожидающих заявок на каждый день на этой неделе в oracle-sql?

#oracle #oracle-sqldeveloper #oracle-apex #oracle-apex-20.1

#Oracle #oracle-sqldeveloper #oracle-apex #oracle-apex-20.1

Вопрос:

Я хочу подсчитать общее количество ожидающих заявок на каждый день на этой неделе. Я смог получить его только на один день за раз. У меня есть этот запрос прямо сейчас:

     SELECT (n.TOTAL - v.TODAY)   d.GISTER AS GISTER
FROM 
(
    -- Counts yesterday
    SELECT

        COUNT(ID) AS Gister

    FROM FRESHDESK_API
    -- 4 = resolved 5 = closed 
    -- Both count as closed
    WHERE STATUS IN(4, 5)
    AND TRUNC(UPDATED_AT) = TRUNC(SYSDATE - 1)
) d
CROSS JOIN
(
    -- Total pending
    SELECT

        COUNT(ID) AS TOTAL

    FROM FRESHDESK_API
    -- 3 is pending
    WHERE STATUS IN(3) 
) n
CROSS JOIN
(
    -- Pending tickets today
    SELECT

        COUNT(ID) AS TODAY

    FROM FRESHDESK_API
    -- 3 is pending
    WHERE STATUS IN(3) 
    AND TRUNC(UPDATED_AT) = TRUNC(SYSDATE) 
) v
 

Я хочу получить такой результат:

  ---------------------------------- --------- ----------   
|               day                |  pending_tickets   |            
 ---------------------------------- --------- ----------   
| Monday                           | 20                 |  
| Tuesday                          | 22                 |  
| Wednesday                        | 25                 |  
| Thursday                         | 24                 |  
| Friday                           | 19                 |  
 ---------------------------------- --------- ----------   
 

Таблица выглядит примерно так (неиспользуемые данные удалены):

  ---------------------------------- --------- ---------- --------- ----------- ---------- ---------- 
|               id                 |     created_at     |     updated_at      |       status        |
 ---------------------------------- --------- ---------- ---------- ---------- ---------- ---------- 
|                                  |                    |                     |                     |
|                                  |                    |                     |                     |
|                                  |                    |                     |                     |
|                                  |                    |                     |                     |
|                                  |                    |                     |                     |
 ---------------------------------- --------- ---------- --------- ----------- --------- ----------- 
 

Ответ №1:

Вы можете использовать left join и group by следующим образом:

 Select to_char(tday.updated_at, 'day') as updated_at, 
       count(tday.id) - count(yday.id) as pending_tickets
  From FRESHDESK_API tday
  Left join FRESHDESK_API yday
       On trunc(tday.UPDATED_AT) = trunc(yday.UPDATED_AT - 1)
       And trunc(yday.UPDATED_AT   1, 'iw') = trunc(sysdate, 'iw')
       And yday.status in (4,5)
 Where trunc(tday.UPDATED_AT, 'iw') = trunc(sysdate, 'iw')
   And tday.status = 3
Group by to_char(tday.updated_at, 'day'), trunc(tday.updated_at)
Order by trunc(tday.updated_at);
 

Комментарии:

1. Это дало бы мне сумму, для которой было установлено значение обновлено в этот день, но я хочу увидеть общее количество ожидающих заявок в этот день

2. Потому что это показывает только заявки, которые были переведены в этот статус в этот день, но большинство заявок уже были в ожидании, так как вы можете их посчитать?