簡體   English   中英

子查詢的 MySQL select MAX 值僅返回外部查詢的一個結果。 為什么?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM