2017-08-16 97 views
1

這是我的數據庫。使用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(結果),但我得到相同的錯誤結果。

這是我的示例數據庫和SQL小提琴上的代碼的鏈接。 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的行。」 * - 使用'集團BY'你不能從表中的行。 「GROUP BY」使用表中的數據計算新行。在[類似問題](https://stackoverflow.com/q/12102200/4265352)上查看[此答案](https://stackoverflow.com/a/28090544/4265352)。 – axiac

+0

謝謝你axiac和Sagar Gangwal。似乎是類似的axiac。爲了不好,搜索時沒有顯示。 – 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