2015-12-08 5 views
1

Привет У меня есть база данных с столбцом, содержащим адреса электронной почты, и второй столбец, содержащий категорию, и третий столбец, содержащий дату.SELECT DISTINCT подсчитывает записи в течение каждого месяца. MYSQL

Что я хочу сделать, так это подсчет количества уникальных адресов электронной почты в категории «А» между несколькими диапазонами дат. Поэтому у меня есть следующее:

SELECT COUNT(DISTINCT email) as counter 
FROM table 
WHERE category = "A" AND date < "2015-12" AND date > "2015-11"; 

Затем я сделаю отдельный запрос для второго диапазона дат.

ТЕПЕРЬ ВОТ МОЯ ПРОБЛЕМА:

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

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

Спасибо!

+0

Использование 'GROUP BY'? –

+0

Снова сбив с толку «уникальные адреса электронной почты за год, скажем так» - та же электронная почта в разные месяцы года считается одной или отдельно для каждого месяца? Вы должны объяснить, что вам нужно очень подробно и определенно, если вы хотите получить правильный результат. Это важная часть программирования. – BI2O2T

ответ

0

Если вы хотите пользовательские даты вы можете установить значение вары

$custom_date_begin = "2015-01-10"; 
$custom_date_end = "2015-02-10"; 

затем для Варс и месяц группу, вы можете использовать нечто вроде этого

"SELECT COUNT(DISTINCT email) as counter 
FROM table 
WHERE category = 'A' 
AND date >= '$custom_begin_date' AND date <='$custom_end_date' 
group by MONTH (date);" 
+0

Извините, спасибо @ chris85 Я обновляю ответ – scaisEdge

+0

Запрос всегда будет возвращать пустой результат, потому что дата не может удовлетворить это: 'date <" 2015-01-01 "AND date>" 2015-12-31 "' – BI2O2T

+0

Я обновил ответ ... – scaisEdge

0

Информация, представленная не достаточно для написание адекватного запроса. Поэтому я попытаюсь угадать подробности.

Предположим, что нам нужно подсчитать количество уникальных писем для каждого месяца и категории.

Запрос может быть как следующее:

SELECT dt, category, COUNT(*) AS cnt 
FROM (
    SELECT LEFT(`date`,7) AS dt, category, email 
    FROM table 
    GROUP BY LEFT(`date`,7), category, email 
) x 
GROUP BY dt, category 

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

Смежные вопросы