SQL - 根据DB2中的两列选择重复项

时间:2018-03-23 15:31:49

标签: sql db2 db2-luw

我正在使用DB2,并且正在尝试计算名为ML_MEASURE的表中的重复行。我在此表中定义为副本的行是包含相同DATETIME和TAG_NAME值的行。所以我在下面尝试了这个:

 def index(Integer max) {
        params.max = Math.min(max ?: 10, 100)
          def Actor = //sql logic to populate actor list
          def ActorInstanceList = Actor.list(params) //invalid
         model:[ActorInstanceList: ActorInstanceList]
    }

查询没有失败,但我得到一个空结果,即使我现在有一个事实我至少有一个副本,当我在下面尝试这个查询时,我得到的结果对于这个特定的tag_name和datetime是正确的: / p>

SELECT 
    DATETIME, 
    TAG_NAME, 
    COUNT(*) AS DUPLICATES
FROM 
    ML_MEASURE 
GROUP BY DATETIME, TAG_NAME 
HAVING COUNT(*) > 1

第二个查询的结果如下所示:

SELECT
    DATETIME,
    TAG_NAME,
    COUNT(*) AS DUPLICATES
FROM
    ML_MEASURE
WHERE
    DATETIME='2018-03-23 15:09:30' AND
    TAG_NAME='HOG.613KU201'
GROUP BY
    DATETIME,
    TAG_NAME.

在第一个查询中我做错了什么?

*更新*

我的桌子排成一排,不确定这是否有所不同。

2 个答案:

答案 0 :(得分:0)

是的,您应该在第一个查询中获得相同的行。如果这两列上有NOT ENFORCED TRUSTED主键或唯一约束,那么优化器将拥有信任约束并且不返回任何行的权限。但是,通过快速测试,我不相信它会对此查询执行此操作。 你在桌子上定义了哪些索引?

(P.S。我假设您没有从shell提示符运行查询并将输出重定向到名称为1的文件)

答案 1 :(得分:0)

这对我有用:

SELECT * FROM (
    SELECT DATETIME, TAG_NAME, COUNT(*) AS DUPLICATES
    FROM ML_MEASURE 
    GROUP BY DATETIME, TAG_NAME 
) WHERE DUPLICATES > 1