Ich habe eine Datenbank, in der Kaufdatensätze gespeichert werden:
|. user_id datetime | ---------------------------------------- |. 1 |. -0,75 | |. 2 |. -0,75 | |. 3 |. 2022-01-01 | |. 2 |. -0,75 | |. 1 |. -0,75 | |. 1 |. 2022-01-02 | |. 1 |. 2022-01-02 | |. 2 |. 0,75 | |. 3 |. 2022-01-02 | |. 3 |. -1,50 | |. 3 |. -1,50 |. 2022-01-02 |N.B. Zeit ist bei diesem Problem nicht wichtig.
Was ich möchte, ist das Ranking jedes Benutzers jeden Tag. Die Situation von Benutzer 1 ist beispielsweise wie folgt:
|. datetime | -------------------------------------------------- ------------------- |. 01.01.2022 | |. 2022-01-02 |. 1 |.Bitte beachten Sie, dass die Rankings täglich berechnet werden.
Die folgende Abfrage gibt einen Teil der Tabelle zurück:
SELECT DATE(`datetime`) AS datetime, SUM(CASE WHEN product = 1 THEN 1 ELSE 0 END) AS product1, SUM(CASE WHEN product = 2 THEN 1 ELSE 0 END) AS product2, SUM(CASE WHEN product = 3 THEN 1 ELSE 0 END) AS product3, SUM(CASE WHEN product = 1 THEN 0.75 ELSE 0 END)+SUM(CASE WHEN product = 2 THEN 0.65 ELSE 0 END)+SUM(CASE WHEN product = 3 THEN 1.5 ELSE 0 END) als Gesamtsumme, AUS „Geschichte“. WHERE user_id=1 GRUPPE NACH DATUM(`datetime`)
Mein Problem ist diesem sehr ähnlich: MySQL-Ranking, aber ich kann die Ergebnisse nicht genau so erhalten, wie ich es verlangt habe. Es können nur alle Benutzer für jeden Tag eingestuft werden. Wenn ich die angegebene Ranking-Funktion hinzufüge, schaut sie sich die Tabelle an und setzt den 02.01.2022 an die erste Stelle (da 2,90 höher als 0,75 ist). Wie sorge ich dafür, dass die Ranglisten für jeden Tag funktionieren?
问题并不完全清楚。然而,我认为你在问的是如何按天对所有用户的购买进行排名: