Aby łatwiej po prostu wziąć wszystkie osoby, które odwiedziły totay i szukać wizytę w ciągu ostatnich 7 dni i jeśli je znajdzie powrót ostatnia data wizyty. Myślę, że takie podejście jest łatwiejsze do zrozumienia:
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();
- Łączymy na select, który już składa się z informacji potrzebujemy (ostatnia wizyta za hash w ciągu ostatnich 7 dni).
liczba wierszy zwracanych jest liczba użytkowników, którzy odwiedzili stronę dziś i w ciągu ostatniego tygodnia.
Można również liczyć ze swoją wybierz, aby uzyskać liczbę czego szukasz w wyniku zapytania:
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');
Dobrze byłoby, aby ustawić coś na http : //mysqlfiddle.com z przykładowymi danymi. – miken32
Trudno jest naprawić zapytanie bez znajomości zawartości tabel, dodaj więc opisy tabel, niektóre przykładowe dane (po prostu użyj 1,2,3, ... dla "hash" i niektórych znaczników czasu dla obu tabel), a oczekiwane wynik za to. Gdybym musiał zgadywać: 'audience' = lista pierwszych odwiedzin,' behaviour' = odwiedziny stron tych użytkowników?Wtedy twoja "grupa przez poglądy" przyjmie datę rejestracji/pierwszej wizyty (a zatem nie będzie się różnić między datami odwiedzin) - prawdopodobnie musisz po prostu dodać 'b.timestamp' do twojego' odrębnego'. Ale proszę dodaj brakujące informacje, więc nie musimy zgadywać. – Solarflare
Witam, czy jesteś zadowolony z mojej odpowiedzi? Byłbym wdzięczny za otrzymanie informacji zwrotnej od ciebie. – iLikeMySql