在mysql中分组之前对数据进行排序(order by)

Bis*_*han 2 mysql group-by sql-order-by

我想将以下数据从sub_prd_id. 但在此之前,我需要max 的 订单数据created_at

我写了如下查询。

select * FROM prd_data group by sub_prd_id order by created_at desc
Run Code Online (Sandbox Code Playgroud)

但是这个查询没有返回我需要的。例如,根据以下数据,查询执行后,结果应如下所示,

id  name    sub_prd_id  created_at
4   Grape     10            2013-04-28 03:11:55
6   Banana    11            2013-04-28 03:23:14
7   Pineapple 12            2013-04-28 03:23:44
Run Code Online (Sandbox Code Playgroud)

这是带有数据的表结构。

id  name    sub_prd_id  created_at
2   Apple     10            2013-04-28 03:04:51
3   Orange    10            2013-04-28 03:08:19
4   Grape     10            2013-04-28 03:11:55
5   Mango     11            2013-04-28 03:22:48
6   Banana    11            2013-04-28 03:23:14
7   Pineapple 12            2013-04-28 03:23:44
Run Code Online (Sandbox Code Playgroud)

egg*_*yal 6

您要实现的目标称为groupwise maximum,使用ORDER BY. 相反,必须找到MAX(),然后将结果连接回表:

SELECT prd_data.* FROM prd_data NATURAL JOIN (
  SELECT   sub_prd_id, MAX(created_at) created_at
  FROM     prd_data
  GROUP BY sub_prd_id
) t
Run Code Online (Sandbox Code Playgroud)

sqlfiddle查看