Чтобы было легче просто взять всех людей, побывавших totay и искать посетить в течение последних 7 дней, и если один найден возвращение последняя дата визита. я думаю, что этот подход легче понять:
select b.`hash` ,
audience.last_visit
from behaviour b
inner join (select v.`hash`, max(v.timestamp) as last_visit from audience v
where DATE(v.timestamp) between date_sub(current_date, interval 7 day) and
date_sub(current_date, interval 1 day)
group by v.`hash`) as audience
on(b.`hash` = audience.`hash`)
where DATE(b.timestamp) = CURDATE();
- Мы присоединяемся на выбор, который уже состоит из информации, нам нужно (последнее посещение в хэш в течение последних 7 дней).
Количество строк возвращенное количество посетителей, посетивших страницу сегодня и в течение последней недели.
Вы также можете рассчитывать от вашего выбора, чтобы получить номер, который вы искали в результате запроса:
select count(*) from
(select b.`hash` ,
audience.last_visit
from behaviour b
inner join (select v.`hash`, max(v.timestamp) as last_visit from audience v
where DATE(v.timestamp) between date_sub(current_date, interval 7 day) and
date_sub(current_date, interval 1 day)
group by v.`hash`) as audience
on(b.`hash` = audience.`hash`)
where DATE(b.timestamp) = CURDATE()) as my_visitors;
- Testdata
drop table if exists your_schema.behaviour;
create table your_schema.behaviour(`hash` varchar(255), `timestamp` timestamp) ;
insert into your_schema.behaviour
values ('ab','2016-05-23'),('ac','2016-05-23');
drop table if exists your_schema.audience;
create table your_schema.audience (`hash` varchar(255), `timestamp` timestamp) ;
insert into your_schema.audience
values ('ab','2016-05-01'),('ab','2016-05-02'),('ab','2016-05-03'),('ab','2016-05-04'),('ab','2016-05-21'),('ab','2016-05-23'),
('ac','2016-05-01'),('ac','2016-05-02'),('ac','2016-05-03'),('ac','2016-05-04'),('ac','2016-05-21'),('ac','2016-05-23'),
('ad','2016-05-01'), ('ad','2016-05-02'), ('ad','2016-05-03'),('ad','2016-05-04'),('ad','2016-05-21'),('ad','2016-05-23');
Было бы полезно, чтобы создать что-то по адресу : //mysqlfiddle.com с некоторыми примерами данных. – miken32
Трудно исправить ваш запрос, не зная, что содержат таблицы, поэтому добавьте описания таблиц, некоторые примеры данных (просто используйте 1,2,3, ... для 'hash' и некоторые временные метки для обеих таблиц) и ожидаемые результат для этого. Если бы мне пришлось угадать: 'аудитория' = список первых посещений,' behaviour' = посещения страниц этих пользователей?Затем ваша группа «по видам» займет дату регистрации/первого посещения (и, следовательно, не будет отличаться от дат посещения) - вам, вероятно, просто нужно добавить 'b.timestamp' в ваш' distinct' тогда. Но, пожалуйста, просто добавьте недостающую информацию, поэтому нам не нужно гадать. – Solarflare
Привет, вы удовлетворены моим ответом? Я был бы рад получить от вас обратную связь. – iLikeMySql