/ / MySQL: Wybierz Where Distinct, jeśli pierwszy wpis, a nie Distinct within query - mysql

MySQL: Wybierz Where Distinct, jeśli pierwszy wpis, a nie Distinct within query - mysql

Mam tabelę zawierającą kolumny Email, Ip, State, City, TimeStamp, Id

Muszę liczyć, gdzie adresy e-mail i adres IP są różne, według grup

Więc kiedy uruchamiam kwerendę MYSQL,

select State, City ,count(distinct( Email )), count(DISTINCT( IP))
from table
group by Stat, City

Daje mi różne, ale nie ORAZ

Potrzebuję liczby odrębnych wiadomości e-mail i & Distinct IP; pogrupowane według państwa, miasta.

I nie może być w grupie, musibyć pierwszym wystąpieniem EMAIL i pierwszym wystąpieniem adresu IP w całej bazie danych. Więc jeśli mogę go rozwinąć i dodać parametr daty, mimo że wybieram konkretną datę, nadal mogę sprawdzić całą bazę danych dla unikalnych.

Więc jeśli potrzebuję

select state, city, count ( distinct ( IP ) , count ( distinct ( EMAIL ))
from table
where timestamp > date(2014-12-01)
group by state, city

Jakiego rodzaju jest to zapytanie? I jak mogę to zrobić?

Moje jelito mówi mi, że muszę zrobić CONCAT zgodnie z sugestią, ale także inny wybór w środku. Wybierz więc całą bazę danych różniącą się od adresu IP, a następnie wybierz konkretne kryteria z drugiego wyboru.

Odpowiedzi:

0 dla odpowiedzi № 1

To może trochę pomóc w uzyskaniu "wyraźnego (A && B)"

SELECT DISTINCT (CONCAT (A, "_", B)), C, D Z tabeli GROUP BY C, D


0 dla odpowiedzi nr 2

Próbowaliśmy to zrobić na serwerze produkcyjnymi okazało się, że wymagane zapytanie wymagało zbyt dużego nakładu zasobów. Stworzyliśmy więc tabelę z aktualizacją pierwszej instancji, w której występuje element, a następnie sprawdzamy liczniki za pomocą sprzężenia:

select count(a.State) from tablename A
inner join table_update  U
on a.id = u.id
WHERE a.parameters..
and c.first_email = 1
and c.first_ip = 1

Nie mogliśmy znaleźć pojedynczego stolika, który nie przyniósłby naszego serwera z 400 000 rekordów. Nie jest to odpowiedź klasyczna, ale to, czego musieliśmy użyć.