2017-08-16 1 views
1

Voici ma base de données.en utilisant MAX() et GROUP BY ne retourne pas le résultat correct

id - date_time    - barcode_no - result 
1 - '2017-08-01 01:00:00' - 'A'  - '1' 
2 - '2017-08-01 02:00:00' - 'A'  - '2' 
31 - '2017-08-01 03:00:00' - 'A'  - '3' 
4 - '2017-08-01 04:00:00' - 'B'  - '4' 
5 - '2017-08-01 05:00:00' - 'B'  - '5' 
61 - '2017-08-01 06:00:00' - 'B'  - '6' 
7 - '2017-08-01 07:00:00' - 'C'  - '7' 
8 - '2017-08-01 08:00:00' - 'C'  - '8' 
9 - '2017-08-01 09:00:00' - 'C'  - '9' 
100- '2017-08-01 10:00:00' - 'C'  - '10' 

J'ai cette requête sur mySQL

SELECT barcode_no,MAX(date_time),result 
FROM test_data_main 
GROUP BY barcode_no 

mais il ne me donne pas le résultat correct. J'ai aussi utilisé any_value (résultat) mais j'ai le même mauvais résultat.

Voici le lien pour mon exemple de base de données et de code sur SQL Fiddle. SAMPLE CODE

Mon exigence est d'obtenir la ligne du dernier code à barres.

id - date_time    - barcode_no - result 
31 - '2017-08-01 03:00:00' - 'A'  - '3' 
61 - '2017-08-01 06:00:00' - 'B'  - '6' 
100- '2017-08-01 10:00:00' - 'C'  - '10' 

mais mon mauvais résultat était

id - date_time    - barcode_no - result 
31 - '2017-08-01 03:00:00' - 'A'  - '1' 
61 - '2017-08-01 06:00:00' - 'B'  - '4' 
100- '2017-08-01 10:00:00' - 'C'  - '7' 

Je ne sais pas ce qui ne va pas avec ma requête. S'il vous plaît donnez votre avis.
Merci d'avance.

+0

* « Mon exigence est d'obtenir la ligne de la dernière barcode_no. » * - Vous ne pouvez pas obtenir les lignes de la table en utilisant 'GROUP BY'. 'GROUP BY' calcule de nouvelles lignes en utilisant les données de la table. Jetez un oeil à [cette réponse] (https://stackoverflow.com/a/28090544/4265352) sur une [question similaire] (https://stackoverflow.com/q/12102200/4265352). – axiac

+0

Merci à vous deux axiac et Sagar Gangwal. Semble être similaire axiac. Pour le pire, il n'a pas montré lors de la recherche. – Roggie

Répondre

2
SELECT test_data_main.* FROM test_data_main 
INNER JOIN 
(
    SELECT barcode_no,MAX(date_time) date_time 
    FROM test_data_main 
    GROUP BY barcode_no 
)Z ON Z.barcode_no=test_data_main.barcode_no AND Z.date_time=test_data_main.date_time 

Vous pouvez essayer le code ci-dessus.

Vous pouvez vérifier ici: Fiddle Demo