1

我有下表:

  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;如果没有其他选择,我怎么能得到它?

4

3 回答 3

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
于 2012-05-30T14:00:55.247 回答
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中使用它。

警告:MySQL 不擅长优化 EXISTS。将其转换为 JOIN 以防您的测量显示性能问题..

于 2012-05-30T14:03:49.237 回答
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

Two caveats: - Yes, it has two selects, but don't underestimate what the server can optimize - My sample assumes T2 is unique within one group of T1

于 2012-05-30T14:01:37.577 回答