在上一个问题的背景下,我几小时前问过: -
Extracting Multiple Similar Rows For Each Distinct Type Of A Column
一些乐于助人的人给了我一个解决我问题的聪明方法。我在我的数据库表上映射了解决方案,这与我为问题设计的虚拟表几乎相同。但不幸的是,查询在我的原始表上提供了错误的输出。我相信这是一个快速修复,我无法发现它。
一些有用的SO用户给我的解决方案: -
http://sqlfiddle.com/#!2/0472b/1
在我映射解决方案之后: -
http://sqlfiddle.com/#!2/082d9/1
我的表的正确输出是: -
+---+--------------+-------------------------------+--------------+-------------+-----+
| d | Johnny Bravo | August, 27 2013 00:00:00+0000 | NAB | Same Amount | 150 |
+---+--------------+-------------------------------+--------------+-------------+-----+
| d | Courage Dog | August, 27 2013 00:00:00+0000 | Commonwealth | Same Amount | 150 |
+---+--------------+-------------------------------+--------------+-------------+-----+
这个问题更像是一个差异点图像:D
答案 0 :(得分:1)
当我看到原始解决方案时,我在想“如果第2列和第3列中存在重复,该怎么办”。瞧,这就是问题所在。以下是适用于SQL Fiddle的修订查询:
SELECT ht.*
FROM helper_table ht INNER JOIN
(SELECT `date`, `amount`
FROM helper_table ht
GROUP BY `date`, `amount`
HAVING COUNT(distinct `name`) = (SELECT COUNT(DISTINCT `name`) FROM helper_table)
) da
ON ht.`date` = da.`date` AND
ht.`amount` = da.`amount`;
这仍然假设字段date
和amount
不包含NULL
值(或者,至少NULL值不匹配)。