【问题标题】:SQL select max of a group [duplicate]SQL选择组的最大值[重复]
【发布时间】:2017-08-11 15:26:14
【问题描述】:

初始表是这样的:

Fruit  | Item_ID | Production_line | Amount_produced | Production_date 
---------------------------------------------------------------
Apples | 652     | 1               | 24              | 2016-05-12    
Pears  | 455     | 4               | 54              | 2016-05-16    
Pears  | 455     | 2               | 26              | 2016-05-13    
Apples | 652     | 6               | 65              | 2016-05-14  
Apples | 652     | 3               | 24              | 2016-05-21    
Pears  | 455     | 7               | 54              | 2016-05-17    
Pears  | 455     | 5               | 26              | 2016-05-15    
Apples | 652     | 8               | 65              | 2016-05-22    

我希望看到的结果是按 Item_ID 以及所有其他列分组的最高级别的生产线(因为它们根据它们所在的级别从 1 向上编号):

Fruit  | Item_ID | Production_line | Amount_produced | Production_date 
---------------------------------------------------------------    
Pears  | 455     | 7               | 54              | 2016-05-17   
Apples | 652     | 8               | 65              | 2016-05-22

当我在查询结束时使用 SELECT 和 MAX(Production_line) 以及 GROUP BY Item_ID 根据 Item_ID 对水果进行分组时,我没有得到正确的生产日期(不确定它是否拉随机一个或什么)也没有正确的产量。

我在这个表中没有 PRIMARY KEY。

我在 phpMyAdmin 中使用 MySQL。

【问题讨论】:

  • 这是一个非常基本的GROUP BY 查询...你试过了吗?
  • 一种水果可以有不同的Item_ID吗?如果是这样,请将一些添加到示例数据中,并根据需要调整结果。

标签: mysql sql group-by phpmyadmin max


【解决方案1】:

有一个子查询,它返回具有最高 Production_line 值的每个水果。 JOIN 结果:

select f1.*
from fruits f1
join (select fruit, max(Production_line) as maxProduction_line
      from fruits
      group by fruit) f2
    on f1.fruit = f2.fruit and f1.Production_line = f2.maxProduction_line

【讨论】:

  • 我没看到你先发帖+1
  • @TimBiegeleisen,谢谢。但是,我不确定 Item_ID 是否必须相同。 (样本数据不佳...)
  • 每个水果的 Item_ID 必须相同。谢谢大家,这帮助我解决了问题!
【解决方案2】:

您的表中可能没有明确的主键,但我认为您想要每个 FruitItem_ID 组合的最近生产日期的记录。如果是这样,那么我们可以将您的表加入到子查询中,该子查询标识每个组的最新生产记录。

SELECT t1.*
FROM yourTable t1
INNER JOIN
(
    SELECT Fruit, Item_ID, MAX(Production_date) AS max_date
    FROM yourTable
    GROUP BY Fruit, Item_ID
) t2
    ON t1.Fruit = t2.Fruit AND
       t1.Item_ID = t2.Item_ID AND
       t1.Production_date = t2.max_date

【讨论】:

    【解决方案3】:

    使用 GROUP BY 从句:

    SELECT T1.*
    FROM your_table T1
    JOIN
    (
      SELECT Fruit , Item_ID , MAX(Production_line) Production_line
      FROM your_table 
      GROUP BY Fruit , Item_ID
    ) A ON T1.Production_line = A.Production_line AND A.Item_ID = T1.Item_ID 
    

    【讨论】:

      【解决方案4】:

      SELECT MAX(Value) 语法只是选择一个特定的列,你可以使用它;虽然不太确定您粘贴了什么,但这将选择具有最大生产线的行

      SELECT Fruit, Item_Id, max(Production_line) Amount_produced, Production_date FROM YourTable;
      

      SELECT Fruit, Item_Id, Production_line, Amount_produced, Production_date FROM YourTable WHERE Production_line = MAX(Production_line);
      

      【讨论】:

        猜你喜欢
        • 2021-07-25
        • 1970-01-01
        • 1970-01-01
        • 2022-11-13
        • 2012-10-08
        • 1970-01-01
        • 2021-12-04
        • 2021-01-29
        • 2020-03-31
        相关资源
        最近更新 更多