[英]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.