Étant donné le tableau suivant:sqlite auto requête de jointure en utilisant max()
| id | user_id | score | date |
|----|---------|-------|------------|
| 1 | 1 | 1 | 2017-08-31 |
| 2 | 1 | 1 | 2017-09-01 |
| 3 | 2 | 2 | 2017-09-01 |
| 4 | 1 | 2 | 2017-09-02 |
| 5 | 2 | 2 | 2017-09-02 |
| 6 | 3 | 1 | 2017-09-02 |
besoin de trouver les user_ids qui ont la note maximale pour une date donnée (il peut y avoir plus d'un), donc je suis essayer:
SELECT s1.user_id
FROM (
SELECT max(score) as max, user_id, date
FROM scores
) AS s2
INNER JOIN scores as s1
ON s1.date = '2017-08-31'
AND s1.score = s2.max
la requête renvoie correctement pour les 2 dernières dates, mais retourne 0 enregistrements pour la première date (« 31/08/2107 »), il doit retourner le score de 1
Pourquoi gagné » t cette première date retourne correctement et/ou est il y a une façon plus élégante d'écrire cette requête?
Voici la version de la requête qui se rapproche le plus du fonctionnement, même si elle ne fonctionne pas lorsqu'il n'y a qu'une seule note de test. Je ne comprends pas comment je m'en tire de ne pas utiliser la clause GROUP BY dans l'ensemble.
SELECT s1.user_id
FROM (
SELECT max(score) as max, user_id, date
FROM scores
) AS s2
INNER JOIN scores as s1
ON s1.date = :date
AND s1.score = s2.max