我有下表:
T1 | T2 | T3
------------
A | 2 | XY
A | 1 | XA
A | 4 | XZ
B | 2 | XF
C | 3 | XA
C | 7 | XY
D | 1 | XL
D | 2 | XF
E | 3 | XA
E | 6 | XZ
E | 2 | XY
F | 3 | XL
F | 2 | XZ
我正在尝试GROUP BY T1并在相同的MAX(T2)行中获得MAX(T2)和T3;如何在没有其他选择的情况下获得它?
答案 0 :(得分:3)
SELECT * FROM table outertable
INNER JOIN (
SELECT t1, MAX(t2) as `mx` FROM table GROUP BY t1
) innertable ON outertable.t1 = innertable.t1 AND outertable.t2 = innertable.mx
答案 1 :(得分:1)
MySQL不支持分析功能(a-la Oracle或MS SQL Server),所以不幸的是你不能(没有第二次查询就这样做)。
MySQL查询看起来像这样:
SELECT *
FROM YOUR_TABLE YT1
WHERE
EXISTS (
SELECT T1
FROM YOUR_TABLE YT2
WHERE YT1.T1 = YT2.T1
GROUP BY T1
HAVING YT1.T2 = MAX(T2)
);
您可以在此SQL Fiddle中使用它。
CAVEAT:MySQL并不擅长优化EXISTS。如果您的测量显示出性能问题,请将其转换为JOIN。
答案 2 :(得分:0)
WITH A AS (
SELECT T1, MAX(T2) AS T2 FROM MyTable GROUP BY T1
)
SELECT A.T1, A.T2, B.T3
FROM A INNER JOIN MyTable AS B
ON B.T1 = A.T1
AND B.T2 = A.T2
两个警告: - 是的,它有两个选择,但不要低估服务器可以优化的内容 - 我的样本假设T2在一组T1中是唯一的