使用 MAX() 和 GROUP BY 没有返回正确的结果[重复]

Posted

技术标签:

【中文标题】使用 MAX() 和 GROUP BY 没有返回正确的结果[重复]【英文标题】:using MAX() and GROUP BY is not returning correct result [duplicate] 【发布时间】:2018-01-24 06:06:19 【问题描述】:

这是我的数据库。

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(result) 但我得到了同样的错误结果。

这是我在 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'

我不确定我的查询有什么问题。请指教。 提前致谢。

【问题讨论】:

"我的要求是获取最新barcode_no所在的行。" -- 使用GROUP BY无法从表中获取行。 GROUP BY 使用表中的数据计算新行。在similar question 上查看this answer。 感谢 axiac 和 Sagar Gangwal。似乎是类似的axiac。可惜搜索时没有显示。 【参考方案1】:
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

【讨论】:

以上是关于使用 MAX() 和 GROUP BY 没有返回正确的结果[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 group by 和 MAX 函数的 Pig Latin 查询

MySQL: GROUP BY + HAVING MAX(...) --- 为啥 HAVING MAX(grade) 不会返回最高等级?

GROUP BY 有 MAX 日期

sql 聚合函数和group by 联合使用

聚合函数 和 group by

mysql max() datediff() group by