格式化sql表,删除重复记录

时间:2015-10-25 09:05:35

标签: mysql

这可能是一个重复的问题,但我无法找到任何解决方案。我有这种数据表..

Name    In_time out_time
John    NULL    9/1/2014 17:00
John    NULL    9/2/2014 11:18
John    NULL    9/2/2014 12:22
John    NULL    9/2/2014 13:22
John    NULL    9/3/2014 13:00
John    NULL    9/3/2014 17:13
John    NULL    9/3/2014 18:13
John    NULL    9/3/2014 19:13

我的问题是我如何删除这些重复数据.row是唯一的但在out_time列中的日期相同(没有时间)。我需要永久删除这些重复项,只考虑日期而不是时间。输出应该是这样的。

Name    In_time out_time
John    NULL    9/1/2014 17:00
John    NULL    9/2/2014 11:18
John    NULL    9/3/2014 13:00

1 个答案:

答案 0 :(得分:2)

将群组对帐单更改为年,月和日

SELECT name,
       in_time,
       min(out_time)
FROM your_table
GROUP BY name,
         DATE_FORMAT(in_time, "%Y-%m-%d");

要删除原始表格中的行,您必须执行2个步骤 首先添加一个虚拟字段thar自动包含日期

ALTER TABLE your_table ADD vdate DATE AS 
  ( DATE_FORMAT(out_time, "%Y-%m-%d") ) PERSISTENT;

然后使用IGNORE创建一个新的唯一索引。

ALTER IGNORE TABLE your_table ADD UNIQUE INDEX idx2 (name,vdate);

直接删除重复