有一个表结构:
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中完成吗?
答案 0 :(得分:0)
这成功返回所有记录,但AddedBy并不是最新的记录。
大多数SQL方言禁止选择不属于GROUPing的列值 - MySQL允许它(取决于服务器设置),但是从随机行提供值对于这些专栏。
你想要的是the Rows Holding the Group-wise Maximum of a Certain Column。