![](/img/trans.png)
[英]How to select rows from MySQL based on max value of a one column and grouping two other columns?
[英]MySQL select unique rows in two columns with the highest value in one column
我有一个基本表:
+-----+--------+------+------+
| id, | name, | cat, | time |
+-----+--------+------+------+
| 1 | jamie | 1 | 100 |
| 2 | jamie | 2 | 100 |
| 3 | jamie | 1 | 50 |
| 4 | jamie | 2 | 150 |
| 5 | bob | 1 | 100 |
| 6 | tim | 1 | 300 |
| 7 | alice | 4 | 100 |
+-----+--------+------+------+
我尝试使用此答案的“左连接,调整连接条件和过滤器”部分: SQL Select only rows with Max Value on a Column但由于某些原因,当存在值为 0 的记录时,它会中断,并且它也不会出于某种原因,不会返回每个唯一的答案。
在此表上进行查询时,我希望收到以下值:
+-----+--------+------+------+
| id, | name, | cat, | time |
+-----+--------+------+------+
| 1 | jamie | 1 | 100 |
| 4 | jamie | 2 | 150 |
| 5 | bob | 1 | 100 |
| 6 | tim | 1 | 300 |
| 7 | alice | 4 | 100 |
+-----+--------+------+------+
因为它们在 name 和 cat 上是唯一的,并且具有最高的时间价值。
我从上面的答案改编的查询是:
SELECT a.name, a.cat, a.id, a.time
FROM data A
INNER JOIN (
SELECT name, cat, id, MAX(time) as time
FROM data
WHERE extra_column = 1
GROUP BY name, cat
) b ON a.id = b.id AND a.time = b.time
这里的问题是每行 ID 是唯一的,您在获取最大值时无法获取唯一值; 您必须改为加入分组值。
SELECT a.name, a.cat, a.id, a.time
FROM data A
INNER JOIN (
SELECT name, cat, MAX(time) as time
FROM data
WHERE extra_column = 1
GROUP BY name, cat
) b ON A.Cat = B.cat and A.Name = B.Name AND a.time = b.time
想一想...那么,mySQL 从 Inline 视图返回的 ID 是什么? 杰米可能是 1 或 3 和 2 或 4。 引擎如何知道选择具有最大 ID 的那个? 它“可以自由地从每个组中选择任何值,因此除非它们相同,否则选择的值是不确定的。”它可能会选择错误的值,从而导致错误的结果。 所以你不能用它来加入。
https://dev.mysql.com/doc/refman/5.0/en/group-by-handling.html
如果要使用自联接,可以使用以下查询:
SELECT
d1.*
FROM
date d1 LEFT JOIN date d2
ON d1.name=d2.name
AND d1.cat=d2.cat
AND d1.time<d2.time
WHERE
d2.time IS NULL
这很简单
SELECT MAX(TIME),name,cat FROM
table name
group by cat
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.