2016-06-01 6 views
0

Ich habe eine Tabelle user_places wie folgt aus:um Geld zu und die meisten Werte in mysql

user_id recorded_date place_visited 
2  2016-04-05  NY 
2  2016-04-07  UK 
2  2016-04-08  UK 
2  2016-04-08  UK 
3  2016-04-08  AUS 
3  2016-04-09  AUS 
2  2016-04-15  NY 
3  2016-04-15  CAN 

Ich versuche, die in den letzten recorded_date der Benutzer und den Namen der besuchten Ort zu bekommen, die er am meisten besucht hat.

d.h

user_id recorded_date_last place_visited_most last_visited_place 
    2  2016-04-15  UK     NY 
    3  2016-04-15  AUS     CAN 
+0

'user_id = 2' hat kein Datum' 2016-04-15' mit ihm verbunden. Wie kommt es, dass dieses Datum in der Ergebnismenge erscheint? –

Antwort

0

Hier ist ein Weg, um eine Unterabfrage:

select * , 
    (select place_visited from mytable t2 
    where t2.user_id = t1.user_id 
    group by place_visited 
    order by count(*) desc 
    limit 1) place_visited_most 
from mytable t1 
where recorded_date = (select max(recorded_date) from mytable) 

http://sqlfiddle.com/#!9/ad351/4

0

Hier ist ein ungetestet Stich an sie. Ich bin nicht so vertraut mit MySQL, so dass es andere Ansätze gibt, die besser funktionieren. Dies ist eine set-basierte Methode, die die Verwendung von limit und order by vermeidet.

select t.user_id, t.place_visited, modex.cnt, maxd.max_recorded_date 
from 
    T t inner join 
    (
     select user_id, max(recorded_date) as max_recorded_date from T 
     group by user_id 
    ) maxd 
     on maxd.user_id = t.user_id 
    inner join 
    (
     select user_id, max(cnt) as max_cnt 
     from 
     (
      select user_id, count(*) as cnt from T 
      group by user_id, place_visited 
     ) counts 
     group by user_id 
    ) maxc 
     on maxc.user_id = t.user_id 
    inner join 
    (
     select user_id, cnt, min(place_visited) as place_most_visited 
     from 
     (
      select user_id, place_visited, count(*) as cnt from T 
      group by user_id, place_visited 
     ) break_ties 
     group by user_id, cnt 
    ) modex 
     on  modex.user_id = maxd.user_id 
      and maxc.max_cnt = modex.cnt and modex.place_most_visited = t.place_visited 

Da Sie Bindungen für den Modus von place_visited haben konnte ich immer nur die in alphabetischer Reihenfolge am niedrigsten. Ich nahm an, dass es keine Verbindungen für recorded_date obwohl geben würde.

Verwandte Themen