Есть таблица c email (mail) пользователей и временем добавления записи email в формате timestamp (timepoint).
Можно ли через select выбрать за текущий день только те адреса из mail, которые будут уникальными, т.е новыми и ранее не встречались. Получается видимо вложенный select, в котором сначало нужно выбрать за текущий день, а потом проверить их на уникальность.
Как в PHP это сделать я знаю, но можно ли решить вопрос на уровне mysql ?
Можно. Нужно отобрать записи за текущую дату и проверить не было ли записей с таким же адресом, но более ранним временем
SELECT
eml.`mail`
FROM
emails eml
WHERE
eml.`timepoint` >= CURRENT_DATE() AND
NOT EXISTS (
SELECT
1
FROM
emails sub
WHERE
sub.`mail` = eml.`mail` AND
sub.`timepoint` < eml.`timepoint`
)
Данный запрос предполагает, что нет двух адресов с одинаковым значением timepoint. Если же это не верно, то строку
sub.`timepoint` < eml.`timepoint`
лучше заменить на
sub.`id` < eml.`id`
где id - уникальный автоинкрементный идентификатор. При условии, что при сортировке записей по полю id значения timepoint не убывают
выбрать за текущий день только те адреса из mail, которые будут уникальными, т.е новыми и ранее не встречались
UPDATE:
@Akina - за сегодня может быть 2 записи с одинаковым email – Dima Kuzmin 13 секунд назад
SELECT email
FROM mail
GROUP BY email
HAVING DATE(MIN(timepoint)) = CURRENT_DATE
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости