为另一列中的重复值选择SELECT MAX个值

时间:2018-12-03 20:41:03

标签: sql db2

我在寻找答案时遇到了一些麻烦,因此,如果在其他地方,我深表歉意。

我有一个表'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语句,以删除两个(或多个)重复的里程条目中的较低者。

1 个答案:

答案 0 :(得分:1)

您的DATA列是否为数字?还是VARCHAR?

如果可以的话最好将其更改为数字,如果没有任何分数且仅取整数,则可以为整数。

如果没有,则可以将它们强制转换为整数值,但是如果有很多事务或表很大,它将很慢且不理想。如果您只想更改数据类型,这样做是不正确的!

SELECT KEY, MIN(CAST(DATA as Int))
    FROM dbo.MileageImport
    GROUP BY KEY
    HAVING (COUNT(KEY)>1)