初始表是这样的:
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
我希望看到的结果是最高级别的生产线(因为它们根据它们所处的级别从1开始编号)按Item_ID和所有其他列分组:
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。
我正在使用MySQL的phpMyAdmin工作。
答案 0 :(得分:4)
有一个子查询,返回具有最高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 :(得分:2)
您的表格中可能没有明确的主键,但我认为您希望记录包含每个Fruit
和Item_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
答案 2 :(得分:1)
使用GROUP BY Cluase:
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
答案 3 :(得分:1)
SELECT MAX(Value)语法只是选择一个可以使用它的特定列;虽然我不确定你粘贴的是什么,但这将选择具有max production_line
的行SELECT Fruit, Item_Id, max(Production_line) Amount_produced, Production_date FROM YourTable;
OR
SELECT Fruit, Item_Id, Production_line, Amount_produced, Production_date FROM YourTable WHERE Production_line = MAX(Production_line);