我在寻找答案时遇到了一些麻烦,因此,如果在其他地方,我深表歉意。
我有一个表'dbo.MileageImport',它具有以下布局,我将其拉出以查找重复的条目:
|KEY | DATA |
---------------------
|V9864653 | 180288 |
|V9864653 | 22189 |
|V9864811 | 11464 |
|V9864811 | 12688 |
我遇到的麻烦是当我在DB2环境中运行以下SQL时:
SELECT KEY, MIN(DATA)
FROM dbo.MileageImport
GROUP BY KEY
HAVING (COUNT(KEY)>1);
最终会拉出以下数据:
|KEY | DATA |
---------------------
|V9864811 | 11464 |
|V9864653 | 180288 |
由于某种原因,它拉取V9864811的MIN值,而不拉V9864653的MIN值。如果我将其取反,然后将MAX而不是MIN放到相反的值。
这里是否缺少某些内容,所以我可以仅对重复的KEY记录提取MIN DATA值,或者还有另一种方法可以做到这一点?该数据来自每个月的报告,因此可能会有不同的键最终需要我纠正。最终,我将其转换为DELETE语句,以删除两个(或多个)重复的里程条目中的较低者。
答案 0 :(得分:1)
您的DATA列是否为数字?还是VARCHAR?
如果可以的话最好将其更改为数字,如果没有任何分数且仅取整数,则可以为整数。
如果没有,则可以将它们强制转换为整数值,但是如果有很多事务或表很大,它将很慢且不理想。如果您只想更改数据类型,这样做是不正确的!
SELECT KEY, MIN(CAST(DATA as Int))
FROM dbo.MileageImport
GROUP BY KEY
HAVING (COUNT(KEY)>1)