如何使mysql查询从MAX(值)中选择数据而不是值?

Posted

技术标签:

【中文标题】如何使mysql查询从MAX(值)中选择数据而不是值?【英文标题】:How to make mysql query select data from MAX(value) and not value? 【发布时间】:2021-07-16 18:08:18 【问题描述】:

我正在尝试返回每个名称的最新日期的价格数据。

SELECT MAX(Date) AS max_date, Date, Price, Name 
from STOCK_DATA_TRANSPOSED 
group by Name

下面的输出是上面查询的输出。正如我们所见,价格数据是由 Date 而不是 max_date 返回的。

max_date                    Date        Price   Name    
2021-04-21 00:00:00 2019-12-31 00:00:00 NULL    1COV.DE 
2021-04-21 00:00:00 2019-12-31 00:00:00 73.41   AAPL    
2021-04-21 00:00:00 2019-12-31 00:00:00 NULL    ABB.ST  
2021-04-21 00:00:00 2019-12-31 00:00:00 88.54   ABBV    
2021-04-21 00:00:00 2019-12-31 00:00:00 86.86   ABT 
2021-04-21 00:00:00 2019-12-31 00:00:00 NULL    AC.PA   
2021-04-21 00:00:00 2019-12-31 00:00:00 NULL    ACA.PA  
2021-04-21 00:00:00 2019-12-31 00:00:00 NULL    ACCD    
2021-04-21 00:00:00 2019-12-31 00:00:00 210.57  ACN 
2021-04-21 00:00:00 2019-12-31 00:00:00 329.81  ADBE    
2021-04-21 00:00:00 2019-12-31 00:00:00 NULL    ADE.OL  
2021-04-21 00:00:00 2019-12-31 00:00:00 NULL    ADS.DE  
2021-04-21 00:00:00 2019-12-31 00:00:00 7.64    AGLE    
2021-04-21 00:00:00 2019-12-31 00:00:00 NULL    AI.PA   
2021-04-21 00:00:00 2019-12-31 00:00:00 51.33   AIG 
2021-04-21 00:00:00 2019-12-31 00:00:00 NULL    AIR.PA  
2021-04-21 00:00:00 2019-12-31 00:00:00 NULL    AKRBP.OL    
2021-04-21 00:00:00 2019-12-31 00:00:00 1.75    AKTX    
2021-04-21 00:00:00 2019-12-31 00:00:00 NULL    ALFA.ST 
2021-04-21 00:00:00 2019-12-31 00:00:00 NULL    ALIV-SDB.ST 
2021-04-21 00:00:00 2019-12-31 00:00:00 112.45  ALL 
2021-04-21 00:00:00 2019-12-31 00:00:00 NULL    ALV.DE  
2021-04-21 00:00:00 2019-12-31 00:00:00 NULL    AMBU-B.CO   
2021-04-21 00:00:00 2019-12-31 00:00:00 241.07  AMGN    
2021-04-21 00:00:00 2019-12-31 00:00:00 229.82  AMT 

如何返回按名称分组的基于 max_date 的价格数据?

【问题讨论】:

Stack Overflow 上已经有很多此类问题的答案。参见例如***.com/questions/1313120/… 【参考方案1】:

试试这个:

SELECT sdt1.Date, sdt1.Price, sdt1.Name
FROM STOCK_DATA_TRANSPOSED AS sdt1
WHERE (sdt1.Date, sdt1.Name) IN
(
    SELECT MAX(sdt2.Date), sdt2.Name
    FROM STOCK_DATA_TRANSPOSED AS sdt2
    GROUP BY sdt2.Name
);

通过这种方式,您可以从STOCK_DATA_TRANSPOSED 获取信息,其中Date 是来自每个NameMAX(Date)。 你可以在DBFiddle看到结果。

【讨论】:

我什至无法测试对我的数据的查询,它会超时 :D 无论如何我们可以优化它吗?

以上是关于如何使mysql查询从MAX(值)中选择数据而不是值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在数据库中存储选择选项的名称而不是值

如何从 GROUPs COUNT 中获取 MAX 值

MySQL MIN/MAX 所有行

MySQL 从每个值中选择 max()

MySQL max 和 MIN 函数显示 100 及以上作为最小值

如何从 MySQL 获取整数作为 PHP 中的整数?