2016-04-07 10 views
0

i eine Dummy-Frage habenmit Ordnung und Gruppe auswählen, indem Sie in maria db (mysql)

Tisch game_log

| id | game_id | score| user_id | created_at 
|1 | 1  | 100 | 1  | 2015-01-01 00:00:00| 
|2 | 1  | 200 | 2  | 2015-01-01 10:00:00| 
|3 | 2  | 100 | 2  | 2015-01-01 00:00:00| 
|4 | 2  | 500 | 1  | 2015-01-01 01:00:00| 
|5 | 2  | 900 | 4  | 2015-01-01 03:00:00| 
|X | 2  | 500 | 1  | 2015-01-02 02:00:00| 
|Y | 3  | 600 | 1  | 2015-01-02 01:00:00| 

i mit Benutzer-IDs nach dem Datum ein Spiel Bewertung erstellen müssen 2015.01.01 Ergebnis wird sieht aus wie

| id | game_id | score| user_id | created_at 
|2 | 1  | 200 | 2  | 2015-01-01 10:00:00| 
|5 | 2  | 900 | 4  | 2015-01-01 03:00:00| 

ich so etwas wie

versucht
SELECT p.id, p.score, p.game_id, p.user_id 
FROM  ( 
        SELECT * 
        FROM  game_log 
        WHERE game_log.score>0 
        AND  game_log.created_at >="2015-01-01 00:00:00" 
        AND  game_log.created_at <"2015-01-02 00:00:00" 
        ORDER BY score DESC) AS p 
GROUP BY p.game_id 
ORDER BY score DESC ; 

aber erhalten Ergebnisse ohne Auftrag

danke!

+3

Sie müssen erklären, was die Logik ist, um das Ergebnis zu generieren. Bitte lesen Sie [** How-to-Ask **] (http://stackoverflow.com/help/how-to-ask) \t \t Und hier ist ein großartiger Ort, um [** START **] (http : //spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/) um zu erfahren, wie Sie die Qualität Ihrer Fragen verbessern und bessere Antworten erhalten. –

+0

MariaDB ignoriert 'ORDER BY' ohne' LIMIT' in Unterabfragen. [Warum wird ORDER BY in einer FROM-Unterabfrage ignoriert?] (Https://mariadb.com/kb/en/mariadb/why-is-order-by-in-a-from-subquery-ignored/) –

Antwort

1

MariaDB ignoriert ORDER BY ohne LIMIT in Unterabfragen. Why is ORDER BY in a FROM Subquery Ignored?. Ein Workaround wäre die Verwendung eines LIMIT in Ihrer Unterabfrage, die groß genug ist, um das Ergebnis nicht zu filtern.

Sie auch eine korrelierte Unterabfrage in der WHERE-Klausel mit LIMIT 1 verwenden könnte nur die Zeilen mit der höchsten Punktzahl pro Spiel zu bekommen:

SELECT p.id, p.score, p.game_id, p.user_id 
from game_log p 
WHERE p.id = (
    SELECT l.id 
    FROM game_log l 
    WHERE l.game_id = p.game_id 
     AND l.score  > 0 
     AND l.created_at >= "2015-01-01 00:00:00" 
     AND l.created_at < "2015-01-02 00:00:00" 
    ORDER BY l.score DESC, l.id 
    LIMIT 1 
) 
ORDER BY p.score, p.game_id DESC ; 

Es gibt auch andere Lösungen, Sie SO finden auf können, Das wird dein Problem lösen.