首页 > 解决方案 > 为另一列中的重复值选择 MAX 值

问题描述

我在为这个问题找到答案时遇到了一些麻烦,所以如果它在其他地方,我深表歉意。

我有一个表'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。如果我将其反转并放入 MAX 而不是 MIN,它会拉取相反的值。

我在这里遗漏了什么,所以我可以只为重复的 KEY 记录提取 MIN DATA 值,还是有另一种方法可以做到这一点?来自此数据的报告每月都在变化,因此可能会有不同的键最终被重复,我需要更正。最终,我将其转换为 DELETE 语句,以删除两个(或更多)重复里程条目中的较低者。

标签: sqldb2

解决方案


你的 DATA 列是数字的吗?还是一个VARCHAR?

如果您发现如果可以的话最好将其更改为数字,如果您没有任何分数并且它只是整数,则可能是整数。

如果没有,那么您可以将它们转换为整数值,但是如果有很多事务或者它的表很大,那么它会很慢并且不理想。如果您可以更改数据类型,那么这样做是不好的做法!

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

推荐阅读