[英]MySQL select MAX value from subquery only returns one results from outer query. Why?
(使用 MariaDB 5.5
我知道这是旧的,但它是第 3 方服务器,我无法更新它)
我有一个带有日期/年份列的数据表。 我需要根据参考 ID 列出所有值,但仅限于最近一年。
根据我最近关于子查询的问题,我认为这将是一个使用带有MAX()
选择的子查询的简单案例,但只会返回一个结果。 为什么? 以及如何获得完整的结果集。
create table ee_stats
(
stat_id int(8) unsigned auto_increment
primary key,
ee_id smallint(6) unsigned null,
ref_id int null comment 'external table reference.',
date_year year null,
value_counter int(8) unsigned null,
value_percentage double(6,3) unsigned null
)
stat_id | ee_id | ref_id | date_year | value_counter | value_percentage
------------------------------------------------------------------------
301 | 32 | 14 | 2020 | 0 | 0
302 | 32 | 1 | 2020 | 0 | 0
303 | 32 | 21 | 2020 | 0 | 0
304 | 32 | 22 | 2020 | 0 | 0
305 | 464 | 17 | 2020 | 40 | 3
306 | 464 | 18 | 2020 | 0 | 0
307 | 464 | 20 | 2020 | 0 | 0
308 | 464 | 2 | 2020 | 87 | 6.6
309 | 464 | 19 | 2020 | 0 | 0
310 | 464 | 7 | 2020 | 15 | 1.1
311 | 464 | 10 | 2020 | 29 | 2.2
312 | 464 | 11 | 2019 | 29 | 2.2
313 | 464 | 16 | 2019 | 13 | 1.0
314 | 464 | 7 | 2019 | 116 | 8.8
315 | 464 | 19 | 2019 | 71 | 5.3
316 | 464 | 4 | 2019 | 67 | 5
预期结果是 select 所有ee_id = 464
的值和有记录的最近一年( 2020
)。
SELECT es.stat_id, es.ee_id, es.ref_id, es.date_year, es.value_count,
es.value_percentage, eed.descr
FROM ee_stats es
LEFT JOIN ee_descriptor eed on es.ref_id = eed.id
WHERE es.ee_id = 464 AND es.date_year = (
SELECT MAX(zz.date_year) FROM ee_stats zz WHERE zz.ee_id = es.ee_id
)
但这仅返回第一个外部结果:
305 | 464 | 17 | 2020 | 40 | 3
子查询在独立运行时正确返回值2020
(替换外部值)。 这个问题非常相似,但这个答案似乎正是应该在这里工作的。
作品:
SELECT es.stat_id, es.ee_id, es.ref_id, es.date_year, es.value_count,
es.value_percentage, eed.descr
FROM ee_stats es
LEFT JOIN ee_descriptor eed on es.ref_id = eed.id
WHERE es.ee_id = 464 AND es.date_year = '2020'
这有效:
SELECT es.stat_id, es.ee_id, es.ref_id, es.date_year, es.value_count,
es.value_percentage, eed.descr
FROM ee_stats es
LEFT JOIN ee_descriptor eed on es.ref_id = eed.id
WHERE es.ee_id = 464 AND es.date_year = (
SELECT MAX(zz.date_year) FROM ee_stats zz WHERE zz.ee_id = '464'
)
但不知何故,对ee_id
值的动态外部引用仅在 SQL 上返回一个结果。
305 | 464 | 17 | 2020 | 40 | 3
306 | 464 | 18 | 2020 | 0 | 0
307 | 464 | 20 | 2020 | 0 | 0
308 | 464 | 2 | 2020 | 87 | 6.6
309 | 464 | 19 | 2020 | 0 | 0
310 | 464 | 7 | 2020 | 15 | 1.1
311 | 464 | 10 | 2020 | 29 | 2.2
我知道了!
我发现我必须将 MAX 实体转换为正确的格式; 所以我不得不将它转换为 DATE 格式。
CAST(MAX(zz.date_year) AS DATE)
这行得通。
SELECT es.stat_id, es.ee_id, es.ref_id, es.date_year, es.value_count,
es.value_percentage, eed.descr
FROM ee_stats es
LEFT JOIN ee_descriptor eed on es.ref_id = eed.id
WHERE es.ee_id = 464 AND es.date_year = (
SELECT CAST(MAX(zz.date_year) AS DATE) FROM ee_stats zz WHERE zz.ee_id = es.ee_id
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.