Ich habe eine Tabelle wie folgt aus:zu einem bestimmten Zeitpunkt
id int primary key
user_id int,
activity_date date,
activity_type int,
activity_value float
uniq-Taste auf (user_id, activity_date, activity_type)
Ich mag würde top 10 Zeilen erhalten bestellt von activity_value
von jedem activity_type
an einem bestimmten Datum (activity_date
), sagen heute oder gestern.
Ich habe versucht, die Self-Join-Variante, aber nicht die richtigen Ergebnisse zu erhalten. Hier ist was ich versucht habe.
select
a.user_id, a.activity_date, a.activity_type, a.activity_value
from
my_table a
left join
my_table b on a.activity_type = b.activity_type and a.id < b.id
where
a.activity_date = curdate()
group by
a.id
having
count(*) < 10
order by
a.activity_value desc;
SQL Fiddle: http://sqlfiddle.com/#!9/d30332/3
Kann mir jemand helfen, diese Abfrage korrekt?
In T-SQL können Sie einen Rang über Partition für activity_type tun, aber ich weiß nicht, was das Äquivalent in MySQL ist. – derloopkat
Was stimmt nicht mit Ihrer aktuellen Lösung? –
@derloopkat wie ich weiß, es gibt keine Entsprechung in MySQL) –