Группировка по дате приносит повторные даты для подсчета случаев - PullRequest
0 голосов
/ 31 октября 2019

Мне нужно написать простой запрос, но я изо всех сил пытаюсь получить желаемый результат. Мне нужно сосчитать 2 разных столбца, а затем сгруппировать их по дате, но я не могу подсчитать КАЖДУЮ дату, результаты повторяют эту дату столько раз, сколько эта дата отображается в таблице.

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

    select 
        distinct(a.dt_agenda) as  sms_date,
        count(case when nvl(a.nr_seq_forma_confirmacao,0) = '1' then 1 end) as sent_sms,
        count(case when a.ds_confirmacao is not null then 1  end) as confirmed_sms
    from
        agenda_consulta a
    where
        trunc(a.dt_agenda,'dd') between :dt_inicio and :dt_fim
    GROUP BY
        A.DT_agenda
        ) t
        order by 1 asc

Я ожидаю, что результатом будет: Например, если я вставлю в dt_inicio и dt_fim (26/10/2019 и 28 /10/2019):

sms_date     sent_sms     confirmed_sms      
26/10/2019    1000          2000
27/10/2019    800            350
28/10/2019    900            500

1 Ответ

1 голос
/ 31 октября 2019

Я думаю, что вы хотите преобразовать в дату:

select trunc(a.dt_agenda) as  sms_date,
       count(case when a.nr_seq_forma_confirmacao = 1 then 1 end) as sent_sms,
       count(a.ds_confirmacao) as confirmed_sms
from agenda_consulta a
where trunc(a.dt_agenda, 'dd') between :dt_inicio and :dt_fim
group by trunc(a.dt_agenda)
order by 1 asc;

Обратите внимание, что я упростил некоторые из логики:

  • Я предполагаю, что nr_seq_forma_confirmacao это число, поэтому я удалил одинарные кавычки в значении сравнения.
  • NVL() не требуется, поскольку NULL = 1 не имеет значения true.
  • Для confirmed_sms достаточно count(a.ds_confirmacao).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...