Если вы знаете даты вы хотите проверить для пользователя, чтобы присутствовать, вы можете выбрать все строки WHERE
, указанная в вашем диапазоне. Я бы использовал ключевое слово BETWEEN
. Например, если вы хотите, чтобы пользователи, которые были активны в марте месяце, вы могли бы сделать что-то вроде этого:
SELECT *
FROM myTable
WHERE dateColumn BETWEEN '2014-03-01' AND '2014-03-31';
Для этого конкретного примера, кажется, что вы хотите, чтобы пользователи, которые сделали хотя бы одну покупку в каждом за последние 4 месяца. Что вы можете сделать, это использовать начало, получая строки для каждого из последних 4-х месяцев, используя функцию DATE_SUB()
, чтобы установить дату начала:
SELECT *
FROM myTable
WHERE date >= DATE_SUB(CURDATE(), INTERVAL 4 MONTH);
После того, как вы есть, что вы можете добавить GROUP BY
заявление в группе пользователя и месяц, чтобы получить одну строку для каждого пользователя в месяц:
SELECT *
FROM myTable
WHERE date >= DATE_SUB(CURDATE(), INTERVAL 4 MONTH)
GROUP BY user, MONTH(date);
После того, как вы есть, что вы можете вытащить из него пользователям HAVING
четыре строки, потому что это означает, что они сделали покупку в каждом из четырех месяцев :
SELECT user
FROM(
SELECT *
FROM myTable
WHERE date >= DATE_SUB(CURDATE(), INTERVAL 4 MONTH)
GROUP BY user, MONTH(date)) t
GROUP BY user
HAVING COUNT(*) = 4;
Вот пример SQL Fiddle.
Кроме того, вот несколько хороших дат и времени functions, чтобы вы имели в виду.
Что означает колонка 'Id'? Очевидно, что это не первичный ключ. –
ID 25 и соответствующая запись для пользователя127 присутствует в каждом месяце –
Итак, вы хотите запросить все идентификаторы пользователей, которые имеют запись для каждого месяца до сегодняшнего дня? Но с какой даты? –