2017-08-16 2 views
1

ここに自分のDBがあります。MAX()とGROUP BYを使用しても正しい結果が返されない

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' 

私は、MySQL

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

にこのクエリを持っているが、それは私に正しい結果を与えるものではありません。私もany_value(結果)を使用しましたが、私は同じ間違った結果を得ます。

ここで私のサンプルDBとSQL Fiddleのコードのリンクです。 SAMPLE CODE

私の要件は、最新のbarcode_noの行を取得することです。

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' 

が、私の間違った結果が、私は私のクエリと間違っているかわからないのです

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' 

ました。お知らせ下さい。
ありがとうございます。

+0

*「私の要件は、最新のbarcode_noの行を取得することです。」* - あなたは 'GROUP BY'を使用してテーブルから行を取得することはできません。 'GROUP BY'はテーブルからのデータを使って新しい行を計算します。 [類似の質問](https://stackoverflow.com/q/12102200/4265352)で[この回答](https://stackoverflow.com/a/28090544/4265352)をご覧ください。 – axiac

+0

axiacとSagar Gangwalの両方に感謝します。似たような軸索に見えます。悪いと検索したときに表示されませんでした。 – Roggie

答えて

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 

上記のコードを試すことができます。

あなたがここに確認することができます。Fiddle Demo

関連する問題