【问题标题】:MySQL max(date) returns max date but other wrong fields [duplicate]MySQL max(date)返回最大日期但其他错误字段[重复]
【发布时间】:2016-04-06 18:11:58
【问题描述】:

我有一张不同日期购买的商品的表格,我只想选择每件商品的最新日期。但是当我使用这段代码时:

     SELECT `pid`,`price`, MAX(`date`) FROM `products_purchase` GROUP BY `pid`
id pid 价格日期 1 6 2.50 2015-12-8 2 6 2.65 2015-11-23 3 6 3.11 2015-10-14

我查看了许多“mysql max(date) not working”的解决方案,但最后注意到它选择了正确的日期但错误的行它显示了其他行的价格。 例如,它将日期显示为 2015-12-8(这是最大日期),但价格为 2.65,来自其他行。 请帮忙。

【问题讨论】:

  • 这是因为 MySQL 是一个愚蠢的数据库,它允许您选择一个不属于分组或不属于聚合的字段。它基本上选择每个 pid 的随机价格。

标签: mysql date select max


【解决方案1】:

获取所有按日期排列的价格并削减第一个

SELECT pid,
SUBSTRING_INDEX(GROUP_CONCAT(price ORDER BY DATE DESC),',',1)as price,
MAX(date)
FROM products_purchase 
GROUP BY pid 

【讨论】:

    【解决方案2】:
    SELECT pid,price,date FROM products_purchase GROUP BY pid order by date desc
    

    【讨论】:

    • 这可能在当前版本的 MySQL 中正常工作,但可能无法在 MariaDB(MySQL 的开源分支)中工作,也不能保证在未来版本的 MySQL 中工作。
    • 我不了解 mariaDB。为什么不能保证在未来的mysql版本中工作?
    • 因为该行为未记录在案 - 您尝试在分组查询中按既不聚合也不分组的字段进行排序。我什至不确定这个版本的查询是否可以在当前版本的 MySQL 中工作,尽管它可以;我通常会将order by 放在内联视图中,然后将group by 放在内联视图之外,但即使这样也有我在第一条评论中提到的相同问题。
    猜你喜欢
    • 2021-11-22
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    相关资源
    最近更新 更多