2017-10-25 3 views
0

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?

+0

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

+0

Was stimmt nicht mit Ihrer aktuellen Lösung? –

+0

@derloopkat wie ich weiß, es gibt keine Entsprechung in MySQL) –

Antwort

1

Ok, ich glaube, Sie sind fast da, ich denke, Sie vermissen nur die b.activity_date = curdate() Bedingung. Auch ich denke, die LEFT JOIN ist unnötig.

select a.* 
from my_table a 
join my_table b on a.activity_type = b.activity_type and 
        a.activity_value <= b.activity_value 
where a.activity_date = curdate() and b.activity_date = curdate() 
group by a.id 
having count(*) <= 10 

demo

+0

unterschätzt Dies wird nicht funktionieren. Sie gibt die Zeilen korrekt, aber nicht die Reihenfolge der obersten Zeilen nach activity_value zurück. SQL Fiddle: http://sqlfiddle.com/#!9/d30332/1 – Nagarjun

+0

@Nagarjun versuchen Sie es jetzt –

+0

Das funktioniert gut, außer das letzte Ergebnis fehlt immer. Wenn Sie z. B. die Anzahl (*) <= 2 zu <= 3 ändern, werden immer noch zwei Zeilen pro Kategorie angezeigt, obwohl in der SQL-Ebene drei Zeilen vorhanden sind. – Nagarjun

Verwandte Themen