查询以使用Group By - MySQL时选择最新记录

时间:2013-03-25 13:47:28

标签: php mysql database

有一个表结构:

ID1 (int), ID2 (int), AddedAt (datetime)

其中 ID1 ID2 是主键。现在此表包含最多 300,000 记录,我需要重新构建表格以具有 1-1 关系。这意味着我需要将 ID1 从主键中删除,并且仅将ID2作为主键,但是对于每个 ID1 <已存在已包含多个 ID2 的记录/强>

在我这样做之前,我需要有一个查询来选择存在多个 ID2 的所有记录并删除它们,只需要留下一个记录ID2并且该记录必须是最新的记录由 AddedAt datetime 列确定。

这是我到目前为止所做的:

 SELECT *, COUNT(*) AS Total
 FROM TestTable
 GROUP BY ID2
 HAVING Total > 1

这会成功返回所有记录,但 AddedBy 并不会成为最新记录。我需要添加到此查询中才能获取ID2分组的最新记录1,以便我可以将ID2作为主键。

如果无法在MySQL中完成,可以在PHP中完成吗?

1 个答案:

答案 0 :(得分:0)

  

这成功返回所有记录,但AddedBy并不是最新的记录。

大多数SQL方言禁止选择不属于GROUPing的列值 - MySQL允许它(取决于服务器设置),但是从随机行提供值对于这些专栏。

你想要的是the Rows Holding the Group-wise Maximum of a Certain Column