删除重复但保留最早的日期

时间:2013-08-02 16:23:55

标签: php mysql

不知何故,我的数据库表基于一个名为kdaccount的字段重复了一堆值。

我尝试做的是删除除1之外的所有重复kdaccounts,我希望那个是最早的提交日期。

我写了一个查询以识别重复的帐户,但我现在确定如何构造mysql查询以删除它们。

$getVendors = mysql_query("SELECT vendor, nameid, kdaccount, MIN(dw_vendors.submitteddate) as `smallestDate` 
                                                FROM pr_po_main 
                                                LEFT JOIN dw_vendors ON pr_po_main.vendor = dw_vendors.kdaccount 
                                                WHERE dw_vendors.submitteddate <> '' GROUP BY vendor HAVING COUNT(dw_vendors.kdaccount) > '1'") or die("Get Vendors: " . mysql_error());

2 个答案:

答案 0 :(得分:1)

希望以下解决方案能为您提供帮助,

1.创建一个重复的dw_vendors表

CREATE TABLE dw_vendors_dup LIKE dw_vendors

2.将kdaccount设为唯一

ALTER TABLE dw_vendors_dup ADD UNIQUE (kdaccount);

3.将现有值插入到新表中,忽略重复项

INSERT IGNORE INTO dw_vendors_dup (vendor, nameid, kdaccount, submitteddate) 
SELECT vendor, nameid, kdaccount, submitteddate FROM dw_vendors
ORDER BY submitteddate

4.删除旧表dw_vendors 并将重复的一个重命名为dw_vendors

答案 1 :(得分:0)

这里发布了一个关于如何在Sql Fiddle上实现它的例子

Linky link

那应该向你展示事物的原理

以防万一是代码

DELETE Test 
FROM Test 
LEFT OUTER JOIN (SELECT MIN(comp) AS compMin, groupval
                FROM Test
                GROUP BY groupval) AS Test2 
ON Test.groupval = Test2.groupval AND Test.comp <> Test2.compmin
WHERE Test2.groupval IS NOT NULL 

表格def遵循

CREATE TABLE Test 
    (
        comp int, 
        groupval int 
    );

编辑:这应该没有条件btw