Per facilitare basta prendere tutte le persone che hanno visitato totay e cerca una visita negli ultimi 7 giorni e se ne viene trovato uno di ritorno l'ultima data di visita. Penso che questo approccio è più facile da comprendere:
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();
- Ci uniamo in una selezione che già si compone di le informazioni necessarie (ultima visita per hash negli ultimi 7 giorni).
Il numero di righe restituito è il numero di visitatori che hanno visitato la pagina oggi e durante l'ultima settimana.
Si può anche contare dal vostro selezionare per ottenere il numero che stavi cercando come un risultato della query:
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');
Sarebbe utile per impostare qualcosa in http : //mysqlfiddle.com con alcuni dati di esempio. – miken32
È difficile correggere la query senza sapere cosa contengono le tabelle, quindi aggiungi le descrizioni della tabella, alcuni dati di esempio (usa solo 1,2,3, ... per 'hash' e alcuni timestamp per entrambe le tabelle), e l'atteso risultato per questo. Se dovessi indovinare: 'audience' = elenco delle prime visite,' comportamento' = visite alle pagine di questi utenti?Quindi il tuo 'gruppo per viste 'prenderà la data della registrazione/prima visita (e quindi non differirà tra le date di visita) - probabilmente dovrai solo aggiungere" b.timestamp "al tuo" distinto "allora. Ma per favore basta aggiungere le informazioni mancanti, quindi non dobbiamo indovinare. – Solarflare
Ciao, sei soddisfatto della mia risposta? Sarei felice di ricevere feedback da voi. – iLikeMySql