在MySQL中查找重复行(复合键)

6
我有一个表格,行的格式如下:
transactionDate, purchaseOrderId
8/8/2012, 55
8/9/2012, 55
8/8/2012, 88
8/9/2012, 55
8/10/2012, 77

我希望找到所有交易日期和购买订单编号都完全相同的行。因此,以下两行是重复的:

8/9/2012, 55
8/9/2012, 55

我尝试使用以下查询:

SELECT
    transactionDate, purchaseOrderId
FROM
    purchases
GROUP BY
    transactionDate, purchaseOrderId
HAVING COUNT(*) > 1;

然而它除了返回8月9日的结果外,还返回了8月8日的结果。我该如何使其仅返回两列都重复的字段(而不是为每个日期返回所有交易)?

谢谢。


1
查询看起来对我来说是正确的 - 也许值得再次检查您的数据? - FJT
@FionaT - 我再次查看了一下,我认为你是正确的。我没有预料到会有一百万个重复行,但我检查过的随机行确实被复制了(表格非常大-20多万行)。所以也许我的原始查询是正确的。 - David
2个回答

15
SELECT 
    transactionDate, purchaseOrderId, COUNT(*) CNT 
FROM 
    purchases 
GROUP BY 
    transactionDate, purchaseOrderId 
HAVING 
    CNT > 1
ORDER BY 
    CNT ASC;

0

将您的transactionDate列更改为“日期”数据类型,并以正确的日期格式插入值,即(“YYYY-MM-DD”)。插入以下值:

    INSERT into purchases values ('2012-08-09', 55);

然后使用您自己编写的上述查询。它将按您所需的方式给出结果。


该列已经属于日期格式且有正确的日期格式。正如我在对自己问题的评论回复中所指出的那样,我的问题中的查询已经给出了正确的响应,但我没有预料到会有这么多重复的行。 - David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接