Как ВЫБРАТЬ различное общее количество столбцов за период и сгруппировать их по create_at? - PullRequest
0 голосов
/ 31 мая 2018

У меня следующий запрос

SELECT created_at::date, count(DISTINCT sales_events.lead_id) FROM sales_events
WHERE sales_events.user_id = 1023
AND (sales_events.created_at BETWEEN '2018-05-24 07:00:00.000000'
AND '2018-05-31 06:30:00.000000')
group by created_at::date;

Движок Postgres вычисляет только различное количество lead_id на created_at::date значение.

Я хотел бы убедиться, что все лиды в этот период времени являются уникальными.Это означает, что если у sales_event с определенным значением lead_id есть действие 'auto_dial' для вторника, а затем 'input_call' для среды, то его следует считать только 1, а не 2 (как в настоящее время).Как использовать PSQL для достижения этой цели?

edit: Удалено условие where, поскольку это вызывало некоторую путаницу.

Ответы [ 3 ]

0 голосов
/ 31 мая 2018
SELECT created_at::date, count(DISTINCT sales_events.lead_id)
  FROM sales_events s1
 WHERE sales_events.user_id = 1023
   AND (sales_events.created_at BETWEEN '2018-05-24 07:00:00.000000' AND '2018-05-31 06:30:00.000000')
   AND s1.created_at::date = (SELECT min(s2.created_at)::date
                          FROM sales_event s2
                         WHERE s1.lead_id = s2.lead_id)
group by created_at::date;
0 голосов
/ 31 мая 2018

Выберите первый раз (в течение периода), когда наблюдается лидерство:

SELECT min_created_at::date, count(*)
FROM (SELECT lead_id, MIN(created_at) as min_created_at
      FROM sales_events se
      WHERE se.user_id = 1023 AND 
            se.created_at BETWEEN '2018-05-24 07:00:00.000000' AND '2018-05-31 06:30:00.000000'
      GROUP BY lead_id
     ) se
GROUP BY min_created_at::date;

Примечание. В этой версии будут учитываться все потенциальные клиенты, замеченные в течение этого периода времени, даже если они появились в более ранние периоды времени.,Если вам нужны только новые потенциальные возможности, один из подходов - переместить условие времени в предложение WHERE во внешнем запросе.

0 голосов
/ 31 мая 2018

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

WITH leads AS (
    SELECT
        min(created_at)::DATE AS created_at_date,
        lead_id
    FROM sales_events
    WHERE
       user_id = 1023
       AND action IN ('auto_dial', 'call_client', 'incoming_call')
        AND (created_at BETWEEN '2018-05-24 07:00:00.000000'
            AND '2018-05-31 06:30:00.000000')
    GROUP BY lead_id
)
SELECT
    created_at_date,
    count(*) AS unique_leads
FROM leads
GROUP BY created_at_date;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...